JPA:加入JPQL

我以为我知道如何在JPQL使用JOIN但显然不是。 谁能帮我?

 select b.fname, b.lname from Users b JOIN Groups c where c.groupName = :groupName 

这给了我例外

 org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing the query Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException 

UsersGroups具有OneToMany关系。

Users.java

 @Entity public class Users implements Serializable{ @OneToMany(mappedBy="user", cascade=CascadeType.ALL) List groups = null; } 

Groups.java

 @Entity public class Groups implements Serializable { @ManyToOne @JoinColumn(name="USERID") private Users user; } 

我的第二个问题是让这个查询返回一个独特的结果,如果我这样做

 String temp = (String) em.createNamedQuery("***") .setParameter("groupName", groupName) .getSingleResult(); 

***代表上面的查询名称。 那么fnamelnametemp连接在一起还是我得到一个List

加入JPQL中的一对多关系如下:

 select b.fname, b.lname from Users b JOIN b.groups c where c.groupName = :groupName 

select子句中指定了几个属性时,result将返回Object[]

 Object[] temp = (Object[]) em.createNamedQuery("...") .setParameter("groupName", groupName) .getSingleResult(); String fname = (String) temp[0]; String lname = (String) temp[1]; 

顺便说一句,为什么你的实体以复数forms命名,这令人困惑。 如果要将表名复数forms,可以使用@Table明确指定实体的表名,这样就不会干扰保留字:

 @Entity @Table(name = "Users") public class User implements Serializable { ... }