Search code examples
javahibernatejpajpqlreserved-words

java.lang.ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode cannot be cast to org.hibernate.hql.internal.ast.tree.FromReferenceNode


I am trying to execute a select statement in JPA which is throwing me the above error. The code is:

TypedQuery<ListPersonsObj> typedQuery = null;
String query = "";
List<ListPersonsObj> list = null;
if (some condition) {
   query = "SELECT NEW in.healthelife.DGS.dao.ListPersonsObj"
                    + "(c.personId, c.givenName, c.middleName, c.address1, "
                    + "c.address2, c.dateOfBirth, "
                    + "c.phoneNumber, c.email) FROM Patients c";
   typedQuery = EntityManagerUtil.getEntityManager()
                   .createQuery(query, ListPersonsObj.class);
   list = typedQuery.getResultList();
}

The ListPersonsObj class:

public class ListPersonsObj {

   private Long personId;
   private String givenName;
   private String middleName;
   private String address1;
   private String address2;
   private String dateOfBirth;
   private String phoneNumber;
   private String email;

   public ListPersonsObj() {
   }

   public ListPersonsObj(Long personId, String givenName, String middleName,
         String address1, String address2,
         String dateOfBirth, String phoneNumber, String email) {
      this.personId = personId;
      this.givenName = givenName;
      this.middleName = middleName;
      this.address1 = address1;
      this.address2 = address2;
      this.dateOfBirth = dateOfBirth;
      this.phoneNumber = phoneNumber;
      this.email = email;
   }

   public ListPersonsObj(ListPersonsObj list) {
      try {
         BeanUtils.copyProperties(this, list);
      } catch (IllegalAccessException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (InvocationTargetException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
   // .. getters & setters 
}

Exception caught

java.lang.ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode cannot be cast to org.hibernate.hql.internal.ast.tree.FromReferenceNode

Can anyone please shed some light on this.


Solution

  • One reason for this happening is that Hibernate finds a reserved word in a wrong place in JPQL.

    For this case

    The problem is with package name

    ...

    The prefix is 'in' instead of 'com'. While parsing the query the 'in' is treated as reserved world

    For reference, see this

    Related issue in Stack Overflow here