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

标签 java hibernate jpa jpql reserved-words

我正在尝试在 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 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

关于java.lang.ClassCastException : org. hibernate.hql.internal.ast.tree.SqlNode 无法转换为 org.hibernate.hql.internal.ast.tree.FromReferenceNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47467447/

相关文章:

java - 使用 Spring Data JPA 通过 @OneToMany 关系属性对实体进行排序

oracle - Hibernate 5 序列生成问题

java - 将日期和时间映射到 MySQL

java - 无法打开 JPA EntityManager 进行事务。 JTA EntityManager 无法使用 getTransaction()

java - 通过java程序从WSDL生成java类

java - Eclipse 和 Intellij DE - 无法连接到 mysql 数据库

java - 当您调用 session.flush() 时,Hibernate 中的哪个 FlushMode 会提交?

java - JPA 中的继承不起作用

Java JAR 文件在本地机器上运行,但在其他机器上缺少文件

java - 焦点 JavaFX FXML 上的 KeyEvent