java.lang.ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode 无法转换为 org.hibernate.hql.internal.ast.tree.FromReferenceNode

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

我正在尝试在 JPA 中执行 select 语句,这会抛出上述错误。代码是:

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();
}

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 
}

捕获异常

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

谁能解释一下这个问题。

发生这种情况的一个原因是 Hibernate 在 JPQL 的错误位置找到了保留字。

对于这种情况

The problem is with package name

...

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

供参考,see this

Stack Overflow 中的相关问题 here