2013-01-02 2 views
1

테이블 관계는 조인최대 절전 모드 기준 API는 다음과 같이

    열 신원, 사용자 이름, 나이
  • 사용자 테이블
  • 은 주소 열 정체성, 유형, 거리
  • 테이블 identity, userid 및 addressid 열이있는 user_address_associations 테이블 userid는 users.identity와 외래 키 관계가 있고 addressid는 addresses.identity와 외래 키 관계가 있습니다. 나는 모든 사용자에게 사용자 및 주소 엔티티 1. 하이버 네이트 매핑 설정 주소 유형을 가진 18 세 이상의를 선택 같은 것입니다

는 존재하지만 주소에 대한 사용자에서 매핑 내에서 정의 된 협회가 없습니다. 사용자와 주소 간의 유일한 링크는 user_address_associations 테이블을 통해 지정됩니다. 또한 User 클래스는 Addresses 속성을 정의하지 않습니다.

원시 SQL은 다음과 같습니다

select * from users 
inner join user_address_associations 
on user_address_associations.userid=users.identity 
inner join addresses 
on user_address_associations.addressid=addresses.identity and addresses.type=1 
where db.users.age >= 18 

최대 절전 모드 3.6.5 기준 API를 사용하여, 나는이 시작 :

Criteria criteria = session.createCriteria(User.class); 

// how to do the join to addresses table through user_address_associations table? 

// where clause 
criteria.add(Restrictions.gt("Age", 1176)); 

질문, 어떻게 조인 formuate합니까입니까?

+0

[Hibernate Criteria and multiple join] 가능한 복제본 (http://stackoverflow.com/questions/2252468/hibernate-criteria-and-multiple-join) – mindas

+0

@mindas, 응답 해 주셔서 감사합니다. 방금 참조한 링크에 게시 한 답변을 읽었지만 여전히 .createCriteria ("b", "join_between_a_b")와 클래스 A와 B 간의 조인으로 변환하는 방법에 대한 명확성이 필요합니다. 또한 API 문서를 이해하려고합니다. –

+0

"클래스 A와 B의 조인으로 변환하는 방법"- 실제 생성 된 SQL을 보려면 org.hibernate.SQL의 추적 로깅을 사용 가능하게 설정하십시오. Hibernate가 내부적으로 어떻게하는지 이해하고 싶다면, 당신은 Hibernate의 소스 코드를 연구 할 필요가있다. – mindas

답변

2

불가능합니다. Hibernate 질의들 (HQL 또는 Criteria)은 엔티티들, 그들의 영속 필드들과 그것들의 연관들만을 사용한다. 조인 테이블이 매핑되지 않고 사용자와 주소 엔티티 간의 연결을 정의하는 데 사용되지 않으면 SQL 쿼리를 제외하고 Hibernate에서이 테이블을 사용하는 쿼리를 정의 할 수 없습니다.

+0

감사합니다. 관계를 정의하기 위해 엔티티를 수정합니다. –