0
Я не могу преобразовать простой Query
в @NamedQuery
. Я что-то пропустил в следующем коде?Как конвертировать запрос в NamedQuery?
//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";
}
Ошибка:
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.getNamedQuery()' ..., я использую 'javax.persistence. EntityManager' – membersound
, если у вас есть импорт javax.persistence.EntityManager; вы должны использовать его – kai
Я не вижу этого в документах: http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html, я думаю, что getNamedQuery предназначен только для сеанса Hibernate. – membersound