gpt4 book ai didi

java - 你能在 JPA SQL javaEE 中进行自然左连接吗?

转载 作者:行者123 更新时间:2023-11-30 07:06:43 26 4
gpt4 key购买 nike

List<Users> temp2;
temp2 = em.createQuery("SELECT u FROM Users u "
+ "NATURAL LEFT JOIN CourseMembers b "
+ "WHERE b.courseMembersPK.userID IS NULL").getResultList();

嗨!如果另一个表 (CourseMembers) 中没有用户对象的记录,我正在尝试获取所有用户对象。

但是我从我的 EJB 中收到此错误:

Caused by: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.2.qualifier): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [SELECT u FROM Users u NATURAL LEFT JOIN CourseMembers b WHERE b.courseMembersPK.userID IS NULL].
[21, 22] The FROM clause has 'Users u' and 'NATURAL LEFT JOIN CourseMembers b' that are not separated by a comma.
[30, 30] An identification variable must be provided for a range variable declaration.

我尝试使用逗号,但它给了我另一个错误。我该如何解决这个问题?

最佳答案

我猜您有一个场景,您希望获得所有不是成员(member)/订阅任何类(class)的用户。

首先,您应该在 UserCourseMembers 实体之间创建一个 OneToMany 关系:

User实体中,您应该有类似的内容:

...
private Set<CourseMembers> courseMembers;
...
@OneToMany(fetch = FetchType.EAGER, mappedBy="user")
public Set<CourseMembers> getCourseMembers() {
return this.courseMembers;
}
...

然后,您需要在 CourseMembersUser 之间建立 ManyToOne 关系:

CourseMembers 实体中,您应该具有以下内容:

...
private User user;
...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="USER_ID", nullable=false)
public User getUser() {
return this.user;
}
...

然后,在您的查询中您可以使用:

FROM User u WHERE u.courseMembers IS EMPTY

希望这有帮助。

关于java - 你能在 JPA SQL javaEE 中进行自然左连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39972992/

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