2012-07-05 4 views
2

'X'클래스가 'X'테이블에 매핑된다 'A'가 'A'테이블에 매핑되고 B 클래스가 'B'테이블에 매핑됩니다.Hibernate criteria 상속 문제를 쿼리하는 API

표 X 구조 (X_ID 일부 다른 열 테이블 구조 (A_ID, X_Id, 다른 열) 표 B 구조 (A_ID, 다른 열) ... 표 B는 또한 갖는다 A_ID

클래스 'B는'클래스 'A'를 확장 우리가 그들 모두에 대해 매핑 파일이 있습니다.

등급 'A'부모 매핑 파일 :

@Entity 
@Table(name = 'A') 
@Inheritance(stratergy=InheritanceType.Joined) 
public abstract class A { 
@Id @Clumns(name = "A_Id) 
@GeneratedValue 
protected Long aId; 
-- some more A specific fields 
} 

등급 'B'매핑 파일 : 나는 최대 절전 모드 기준 API를 사용하여 작성해야 그 아래로

@Entity 
@Table(name= 'B') 
Public class B extends A{ 
---- B specific fields 
} 

지금, 나는 SQL 쿼리가 있습니다.

select * from X 
INNER JOIN A 
ON X.id = A.id 
INNER JOIN B 
ON A.id = B.id 
where B.name = 'XYZ' 
    and B.Sex = 'M' 

내가 함께 올라와있다 : 따라서 최대 절전 모드 우리가 매핑 파일을 선택하면, A에 B의 직접적인 언급은 없다

Criteria c = session.createCriteria(x.class, "x"); 
        .createAlias("x.a", "a") 
        .createAlias("a.b", "b")   
        .add(Restrictions.eq("b.sex", "M")) 
        .add(Restrictions.eq("b.name", "XYZ")); 

그러나 "는 B A와 관련이없는"밖으로 던져 실재.

이 상속 쿼리 crteria에 매핑 할 수있는 방법이 있습니까

답변

1

B는-A A. 당신은 어떤이 A와 B 최대 절전 모드 사이에 가입 할 필요가 없습니다 그렇게 그것에 대해 당신 :

Criteria c = session.createCriteria(x.class, "x"); 
        .createAlias("x.a", "b") 
        .add(Restrictions.eq("b.sex", "M")) 
        .add(Restrictions.eq("b.name", "XYZ")); 
+0

감사합니다 ... 매력처럼 작동했습니다. 이전에 알았어 야했는데 ... 지금은 잘 알고 있습니다. – user1502377

관련 문제