2009-09-24 2 views
7

이 클래스를 엔티티로 매핑했습니다.이 클래스를 Person으로 호출 할 수 있습니다. 사람은 주소에 임베디드/구성 요소 관계가 있습니다. 주소 개체를 반환하는 조건을 사용하는 데 문제가 있습니다. 나는 이것을 시도했다 :Hibernate 기준을 사용하여 emebedded 또는 구성 요소 검색 api

Criteria.createCriteria(Address.class) 

어떤 작동하지 않는다. 나는 엔티티를 거쳐야 할 필요가 있다고 생각하지만 어떤 종류의 프로젝션이 필요합니까?

Criteria.createCriteria(Person.class).<<what goes here???>> 

제안 사항?

답변

6

구성 요소의 수명은 소유자가 제어합니다. 그들은 협회로 간주되지 않습니다. 따라서 쿼리에서 구성 요소를 단독으로 검색 할 수는 없습니다. 그러나 기준에 사용할 수 있습니다. 당신의 "주소"클래스를 가정

"사람"에서 "주소", 당신이 뭔가를 할 수로 매핑된다

이 하나 검색하거나 최대 절전 모드에 포함 된 개체의 속성을 참조 할 수있는 방법입니다
Criteria.createCriteria(Person.class) 
.add(Restrictions.eq("address.street", street)); 
+0

좋아 명확하게,하지만 어떻게 내가 HQL을 할 수 와서 직접 주소를 검색? 왜 같은 질문을 쿼리에 적용하지 않습니까? – Konstantin

+0

HQL에는 Criteria API가 제공하지 않는 기능이 있기 때문에. 이제 주소를 아무리 혼자서 돌려 주길 원한다면 Address의 모든 속성을 포함 할 Person 기반 기준을위한 투영 목록을 만들고 결과에'AliasToBeanResultTransformer'를 적용 할 수 있습니다. 그러나 이것은 두통이 많아서 보여줄 것이 없습니다. 나는 전체 Person을 대신 선택하고 주소 (만약 당신이 필요로하는 것)을 추출 할 것이다. 또는 HQL과 함께하십시오. – ChssPly76

0

.

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
       Parent.class,"parent"); 
criteria.createAlias("embeddedObjectFieldName", "parent.embeddedObjectFieldName"); 

criteria.setProjection(Projections.projectionList() 
       .add(Projections.groupProperty("parent.propertyOne")) 
       .add(Projections.max("embeddedObjectFieldName.embeddedobjectproperty"))); 

희망은 위의