简体   繁体   English

如何将查询转换为NamedQuery?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM