问题描述
在使用JPA的createQuery()方法时报出以下错误:
org.hibernate.jpa.internal.QueryImpl cannot be cast to javax.management.Query
截图如下:
运行环境
JPA + postgreSQL + maven
解决方法
原来的代码如下:
Query query = (Query) em.createQuery("select person from Person person where person.name = :name");
解决方法改为如下:
javax.persistence.Query query = em.createQuery("select person from Person person where person.name = :name");
也就是将生成的query类型改为javax.persistence.Query类型.
原因解析
原因很简单,通过后台报错就可以得出:createQuery方法生成的query对象是org.hibernate.jpa.internal.QueryImpl类型的,在这里无法强制转换成javax.management.Query类型的,所以将其转换成javax.persistence.Query类型的即可.
问题延展
通过以上分析,下面的这些问题应该就是同一类问题了:
1.java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl cannot be cast to java.util.List
2.ClassCastException: org.hibernate.internal.SQLQueryImpl cannot be cast to org.hibernate.internal.QueryImpl