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

こんにちは!私は、別のテーブル(CourseMembers)にそれらのレコードがない場合、すべてのユーザーオブジェクトを取得しようとしています。JPA SQL javaEEでNaturalの左結合を実行できますか?

しかし、私は私の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. 

私はコンマで試してみましたが、それは私に別のエラーが発生します。これをどうすれば解決できますか?

+1

このクエリ言語では、オブジェクト構造を操作する必要があります。 – Jens

+0

あなたはjoinの使用を全く許可されていませんか? –

+0

あなたはジョインを使用できます。しかし、自然な結合ではない – Jens

答えて

1

あなたは、メンバーではない/コースに加入しているすべてのユーザーを取得したいシナリオがあると思います。その後

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

はあなたがCourseMembersManyToOne関係を必要とする:あなたが何かを持っている必要がありUserエンティティで

は、最初にあなたはUserCourseMembersエンティティ間のOneToMany関係を作成する必要がありますおよびUser

CourseMembersエンティティでは、あなたが使用することができますあなたのクエリで、

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

そして:houldのようなものを持っている

FROM User u WHERE u.courseMembers IS EMPTY 

・ホープ、このことができます。

関連する問題