EntityManager创建查询显示意外令牌:

时间:2016-03-21 13:21:54

标签: mysql spring hibernate jpa

我使用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集成。为什么namedquerycreatequery的{​​{1}}方法中使用时会显示未预期的令牌?

1 个答案:

答案 0 :(得分:3)

em.createQuery应该接受JPQL。你应该做

em.createNamedQuery("getUserName");