2016-08-04 1 views
0

innerjoin에 두 개 이상의 열을 매핑 할 때 조건에 대한 매핑이 있고 변경할 수 있습니까?JPA innerJoin을 사용할 때 어떻게 변경할 수 있습니까?와 'to'또는 '?

부모 테이블

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") 
private List<KeyboxDept> keyboxDept; 

자식 테이블

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumns({ 
    @JoinColumn(name = "KEY_TARGET_ID", referencedColumnName = "DEPT_ID", insertable = false, updatable = false), 
    @JoinColumn(name = "KEY_TARGET_UPPER_ID", referencedColumnName = "DEPT_ID", insertable = false, updatable = false) 
}) 
private User user; 

쿼리

select 
     user0_.user_id as user_id1_3_, 
     user0_.dept_id as dept_id2_3_, 
     user0_.posi_id as posi_id3_3_ 
    from 
     cm_user user0_ 
    inner join 
     cm_keybox_dept keyboxdept2_ 
      on user0_.dept_id=keyboxdept2_.key_target_id 
      and user0_.dept_id=keyboxdept2_.key_target_upper_id 
    where 
     user0_.user_id=? limit ? 

내가 and -> or를 전환 할 수

을 만들어 ???

+0

N-1 관계의 컨텍스트에서 의미가 없기 때문에 아니오. –

답변

0

나는

Criteria criteria = session.createCriteria(persistentClass); 
criteria.createCriteria("propertyName", Criteria.LEFT_JOIN); 
0

당신은 개체 정의에 cascade = CascadeType.ALL이 .... JPA에 대한하지만 우리는이 작업을 수행 할 수있는 기준을 사용하여 최대 절전 모드에서 확실하지 않다. 즉, The operations that must be cascaded to the target of the association을 의미합니다. 목표 (코드에 KeyboxDept)가 있어야합니다. 만약 당신이 그것을 제거, 어떤 작업을 계단식으로 의미, 나는 생성 된 SQL이 inner 없을 것이라고 생각합니다.

0

검색 기준이 조인 된 테이블 키와 일치하는 외래 키가 아닌 경우 외래 키의 개별 열 파트 (@JoinColumn 요소) 사이에 분명히 AND 관계가 있으므로이 구문을 사용할 수 없습니다. 이것이 생성 된 원시 SQL에 AND가 들어있는 이유입니다. OR이 필요한 경우 OR을 포함하는 별도의 JPQL 쿼리로 해당 멤버를 초기화해야하며 @ManyToOne 주석이 필요하지 않습니다.

관련 문제