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
Users
与Groups
具有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();
***
代表上面的查询名称。 那么fname
和lname
在temp
连接在一起还是我得到一个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 { ... }