[英]How to convert Query to NamedQuery?
I'm failing to convert a simple Query
to a @NamedQuery
. 我无法将简单的
Query
转换为@NamedQuery
。 Am I missing something in the following code? 我在以下代码中缺少什么吗?
//works fine
em.createQuery("FROM Person p WHERE p.name = :name").setParameter("name", name).getResultList();
//throws exception
em.createQuery(Person.FIND_BY_ID).setParameter("name", name).getResultList();
@NamedQueries({
@NamedQuery(
name = BookingRequest.FIND_BY_ID,
query = "FROM Person p WHERE p.name = :name"
)
})
class Person {
public static final String FIND_BY_ID = "Person.findById";
}
Error: 错误:
java.lang.IllegalArgumentException: node to traverse cannot be null!
at org.hibernate.hql.internal.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:65)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:274)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:222)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:200)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1703)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291)
你应该用
em.createNamedQuery("query name") ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.