gpt4 book ai didi

java - JPA:在 JPQL 中加入

转载 作者:IT老高 更新时间:2023-10-28 20:53:32 28 4
gpt4 key购买 nike

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

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

这给了我异常(exception)

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> 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 也是如此和 lnametemp 内连接在一起或者我得到一个 List<String>回来了吗?

最佳答案

在 JPQL 中加入一对多关系如下所示:

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

select子句中指定多个属性时,返回结果为Object[]:

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

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

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

关于java - JPA:在 JPQL 中加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730625/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com