2016-09-10 9 views
0

나는 내 저장소에서 다음 쿼리가 :스프링 데이터 JPA는 join fetch를 떠나 where 절

SELECT p FROM Project p JOIN p.users u WHERE u.login =:login 

사용자와 프로젝트 사이에 많은 relationshio하는 많은 사람들이있다합니다. 모든 것이 잘 작동하고 사용자의 프로젝트를 반환하지만 각 프로젝트가 해당 사용자 집합을 반환하기를 원합니다.

UPDATE :

SELECT p FROM Project p JOIN FECTH p.users JOIN p.users u WHERE u.login =:login 

을하지만 지금은 다음과 같은 예외가 있어요 : 다음 mateuszlo로 다음과 같은 시도는 제안

nested exception is java.lang.IllegalArgumentException: Count query validation failed for method public abstract org.springframework.data.domain.Page com.example.app.repository.ProjectRepository.findAllByUserLo‌​gin(java.lang.String‌​,org.springframework‌​.data.domain.Pageabl‌​e)! org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list 

답변

1

사용하는 쿼리를 가입 FETCH에 대한 명명 된 별명을 작성하는 것은 불가능을 그것은 WHERE 성명에. JPA는 원하지 않는 상황으로 쉽게 이어질 수 있기 때문에 이것을 목적으로 허용하지 않습니다.

X, 즉 Users : John, Tom 및 Mike가 있다고 생각하십시오. 사용자 John이 User - John 중 하나만 사용하여 Project X를 반환하는 프로젝트의 FETCH JOIN 쿼리. 그러면 현재 데이터베이스 상태와 일치하지 않는 불완전한 Project 엔터티가 생성됩니다.

그럼 두 번 가입하면됩니다. 정상 JOIN에 처음 Users을 correspoding 가져 FETCH JOIN와 다음 두 번째로 적절한 Projet 기록을 식별하고합니다 :

SELECT p FROM Project p 
JOIN FETCH p.users 
JOIN p.users u WHERE u.login =:login 
+0

덕분에 mateuszlo. 이미 시도했지만 다음과 같은 예외가 있습니다. 중첩 예외는 java.lang.IllegalArgumentException입니다. 메서드에 대한 쿼리 유효성 검사가 실패했습니다. public abstract org.springframework.data.domain.Page com.example.app.repository.ProjectRepository.findAllByUserLogin (java.lang .String, org.springframework.data.domain.Pageable)! org.hibernate.QueryException : 쿼리는 조인 페칭을 지정했으나 페치 된 연관의 소유자가 선택 목록에 존재하지 않았습니다. –