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

5
我将尝试执行JPA中的select语句,但是遇到了以上错误。代码如下:

我正在尝试在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类:
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无法转换为 org.hibernate.hql.internal.ast.tree.FromReferenceNode

能否有人详细解释一下这个问题。


请提供完整的异常堆栈跟踪,并在代码中注释出现异常的行号。 - pirho
@pirho 问题出在包名(in.healthelife.*)。我将其更改为com.healthelife,现在它可以工作了。 - Rubal Jain
1个回答

7
这种情况发生的原因之一是Hibernate在JPQL中找到了一个错误的保留字。对于这种情况,问题出在包名:
包名前缀是“in”而不是“com”。在解析查询时,“in”被视为保留字。
参考:此处有相关问题。
在Stack Overflow上有相关问题:请点击此处

是的,我刚刚发现了。不过还是谢谢你的回复。我已经改变了包名,现在它可以工作了! - Rubal Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接