2011-04-01 3 views
2

작동하지 일대일 2,이JPA 페치 = FetchType.EAGER 내 UserTbl 엔티티에서

@OneToOne(cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER) 
private RetailPostUserTbl retailPostUser; 

@OneToOne(cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER) 
private BackOfficeUserTbl backOfficeUser; 

이 그러나 모두는 항상 null입니다.

사용자는 둘 중 하나 이상에 속해야하며 둘 다 포함해야하지만 쿼리는 항상 null을 반환합니다.

나는이

Root<UserTbl> root = cq.from(UserTbl.class); 
    root.fetch(UserTbl_.retailPostUser, JoinType.LEFT); 
    root.fetch(UserTbl_.backOfficeUser, JoinType.LEFT); 

같은 기준 API를 통해 그것을 가져 오는 시도하지만 그들은 항상 여전히 null입니다.

이것이 작동하지 않는 이유는 무엇입니까?

역은 예를 들어, 잘 작동

는 RetailPostUserTbl, 이것은

@OneToOne(optional = false, cascade=CascadeType.REMOVE) 
@PrimaryKeyJoinColumn 
private UserTbl user; 

답변

2
FetchType 매핑 @OneToOne를 들어, 저장 또는 개체를 검색하는 동안 당신은 뭔가 잘못하고 있어야합니다

는 EAGER 디폴트로 작동 명시 적으로 언급 할 필요는 없습니다. 만약 방법 작품 위에

entityManager.find(); 

모든 매핑 된 객체는 다음 기준에 쿼리를 확인하여 엔티티를 반환 - 당신이로 엔티티를로드하는 것을 시도했다.

+0

또한 null을 반환하고 그 이유는 내가 FetchType.EAGER를 추가했기 때문입니다. 반대 작업은 새로운 편집을 참조하십시오. –

+0

잘못된 일을하고있었습니다! 실제 데이터가 요청되었을 때 객체를로드했기 때문에 내성에 의해 실제로 발생하기 전에 내 주장을하고있었습니다. –

관련 문제