【发布时间】:2014-11-12 19:38:05
【问题描述】:
我正在创建 JPQL 数据库请求。我有一个超类和两个子类;
@javax.persistence.Entity
@Inheritance( strategy = InheritanceType.JOINED )
public class SuperClass(){
@Column(columnDefinition = "INTEGER")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
// others attributes/getters and setters
}
子类:
@Entity
public class First extends SuperClass{
// attributes, getters and setters
}
@Entity
public class Second extends SuperClass{
// attributes, getters and setters
}
我正在构建一个 JPQL 查询以在数据库中获取 First class 的结果。我注意到一些奇怪的事情。我可能会错过一些关于 JPQL 的内容。
String finalQuery = "SELECT distinct sup from SuperClass sup where sup.class =:myType";
Query query = em.createQuery(finalQuery);
query.setParameter("myType",First);
这里我遇到了一个异常:
Caused by: java.lang.IllegalArgumentException: Parameter value [First] was not matching type [java.lang.Integer]
at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) ~[hibernate-entitymanager-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:364) ~[hibernate-entitymanager-3.6.8.Final.jar:3.6.8.Final]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) ~[hibernate-entitymanager-3.6.8.Final.jar:3.6.8.Final]
但如果我写
String finalQuery = "SELECT distinct sup from SuperClass sup where sup.class =First";
Query query = em.createQuery(finalQuery);
List<PublishableElement> resultList = query .getResultList();
而且没有错误。为什么 ?不能动态传递类类型吗? 我真的不知道发生了什么。我认为它在其中一条线上:
Query query = em.createQuery(finalQuery);
query.setParameter("myType",First);
谢谢
【问题讨论】:
标签: sql hibernate persistence jpql