2017-07-21 118 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不會識別它。如果您瞭解問題的原因,我將非常感謝您的意見。

相關問題