2016-10-11 3 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

그럼 가입을 전혀 사용할 수 없습니까? –

+0

조인을 사용할 수 있습니다. 하지만 자연스러운 조인이 아닙니다. – Jens

답변

1

회원이 아니거나 모든 강좌에 가입 한 모든 사용자를 얻으려는 시나리오가 있다고 생각합니다. 그런 다음

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

당신이 CourseMembers 사이 ManyToOne 관계를 필요 : 당신이 뭔가를 가지고 있어야 User 기업에서

:

는 처음에 당신은 UserCourseMembers 엔티티 사이의 OneToMany 관계를 만들어야합니다 및 User :

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 

희망 hould 같은 뭔가가있다.

관련 문제