2017-07-21 101 views
2

异常错误代码为什么JPQL语法异常发生?

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 
EntityManager em = emf.createEntityManager(); 
EntityTransaction tx = em.getTransaction(); 
tx.begin(); 
TypedQuery<Member> query = em.createQuery("select m from Member m",Member.class); 
List<Member> memberList = query.getResultList(); 

实体类

@Entity 
@Table(name="MEMBER") 
public class Member { 
    @Id 
    @Column(name="MEMBER_ID") 
    private String id; 
    @Column(name="USERNAME") 
    private String username; 
    @ManyToOne 
    @JoinColumn(name="TEAM_ID", referencedColumnName = "TEAM_ID") 
    private Team team; 

    public Member() { 
    } 

    public Member(String id, String username) { 
     this.id = id; 
     this.username = username; 
    } 

    public String getId() { 
     return id; 
    } 

    public Member setId(String id) { 
     this.id = id; 
     return this; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public Member setUsername(String username) { 
     this.username = username; 
     return this; 
    } 

    public Team getTeam() { 
     return team; 
    } 

    public Member setTeam(Team team) { 
     this.team = team; 
     team.getMembers().add(this); 
     return this; 
    } 

    @Override 
    public String toString() { 
     return "Member{" + 
       "id='" + id + '\'' + 
       ", username='" + username + '\'' + 
       ", team=" + team + 
       '}'; 
    } 

} 

异常消息

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Member near line 1, column 15 [select m from Member m] 

的pom.xml

<dependency> 
<groupId>org.hibernate</groupId> 
<artifactId>hibernate-entitymanager</artifactId> 
<version>4.3.10.Final</version> 
</dependency> 

我不知道为什么会出现这种异常,因为语法看起来好。我们正在使用JPA作为一个团队项目。但上述问题仅限于一些团队成员。我不知道什么样的环境会影响这种例外。

我知道Hibernate支持JPQL标准。

+0

https://stackoverflow.com/questions/33808306/org-hibernate-hql-internal-ast-querysyntaxexception-unexpected-token-near-li。你试试这个。 你应该省略。选择m –

+0

看起来像你的'成员'类没有映射。向我们展示您的映射配置。 – talex

+0

@talex除了实体类的注解之外,还需要什么其他映射? – YunjinJang

回答

-1
TypedQuery<Member> query = em.createQuery("from Member"); 

你试试看。不要使用select m子句。

+0

发生同样的异常。 :( – YunjinJang

+0

列表结果=(列表)session.createQuery(“来自成员”)。list(); –

+0

你试试这个代码,它会为你工作 –

0

我不知道原因,但我解决了这个问题。问题是实体类必须在包中声明。如果实体类在默认包中声明,则JPQL不会识别它。如果您了解问题的原因,我将非常感谢您的意见。

相关问题