2010-06-17 4 views
0

나는 'submitter'라는 속성을 가진 'Response'객체를 가지고있다. 제출자는 학생, 교사 등 다양한 수업 중 하나 일 수 있습니다.Hibernate Criteria 질의 내에서 association의 클래스를 제한하기

교사가 제출 한 답변 만 선택하여 기준 쿼리를 실행할 수 있기를 원합니다. 관련 엔티티. 이것에 대한 아이디어가 있습니까? 나는 직접적인 SQL이나 HQL로부터 멀리하고 싶다.

답변

0

네이티브 SQL을 사용하여 끝났습니다. 아니 가장 큰,하지만 그것은 끔찍한되지 않습니다 중 하나

Criteria c = session.createCriteria(Response.class); 
c.createCriteria("submitter").add(Restrictions.sqlRestriction("{alias}.person_type='student'")); 

그것은 내가 테이블 당 상속 계층 구조 매핑 전략을 사용했기 때문에 이것은 단지 일했다 주목할 가치가있다. 그것 없이는, 나는 discriminator 란을 가지지 않았을 것이다. HQL과

2

According to Gavin King 다음 작품 :

where foo.class in (...) 

당신은

c.createCriteria("submitter").add(Restrictions.eq("class", Teacher.class)) 

를 시도?

+0

예, 덜 우아한'c.createCriteria ("submitter")뿐만 아니라 두 번째 시도해 보았습니다. add (Restrictions.in ("class", new Class [] {CommunityHealthWorker.class})) Gavin이 "foo.class in"라고 말했기 때문에 – DLaw

+0

그리고 작동 했습니까? 오, 그리고 개빈은 instanceof가 서브 타입을 받아들이 기 때문에'eq'보다는 아마'in'을 사용했을 것이지만 eq는 그렇지 않습니다. 따라서 교사가 추상적이고 RegularTeacher 또는 SubstituteTeacher 인 경우 '교사의 인스턴스'를 표현하려면'in (RegularTeacher.class, SubstituteTeacher.class) '가 필요합니다. – meriton

관련 문제