我使用spring和hibernate,使用JPG进行数据库访问。使用namedQuery
时出现“意外令牌”错误,但如果我直接在entityManager
的创建方法中编写查询,则会得到正确的结果。
这是我的pojo和查询用于检索用户名:
@NamedQueries(
@NamedQuery( name="getUserName" , query="select u.name from User u")
})
@Entity
@Table( name ="user")
public class User {
@Id
@Column( name="user_id")
private int id;
@Column( name="user_name")
private String name;
//getter setter
}
这是我想要检索用户名的代码。
entityManager.createQuery("getUserName").getResultList();
它产生了这个错误:
org.hibernate.hql.internal.ast.ErrorCounter: line 1:1: unexpected token: getUserName
! antlr.NoViableAltException: unexpected token: getUserName
当我在entityManager.createQuery("write same query here ")
内编写相同的查询时,它可以正常工作。但是我想在命名查询中编写查询并在需要时访问它。我正在使用spring和hibernate集成。为什么namedquery
在createquery
的{{1}}方法中使用时会显示未预期的令牌?
答案 0 :(得分:3)
em.createQuery
应该接受JPQL。你应该做
em.createNamedQuery("getUserName");