최대 절전 모드 3.5를 사용 중이고 키워드가 포함 된 부모 개체를 반환하거나 자식 개체 중 하나에 예어. 여기 OR 부모 - 자식 연결에 대한 Hibernate Critera 질의
@Entity
@Table(name="cats")
public class Cat {
private String name;
private Set<Cat> kittens;
}
이
Criteria Query 섹션에서 샘플 쿼리입니다 : 여기
는
Hibernate Documentation에서 고양이를 사용하는 예입니다
Criteria criteria = session.createCriteria(Cat.class)
.add(Restrictions.like("name", "F%")
.createAlias("kittens", "kits")
.addRestrictions.like("kits.name", "F%");
List<Cat> cats = criteria.list();
이는 고양이 개체를 반환 곳의 이름 parent는 F로 시작하고 새끼 고양이 중 하나의 이름은 F로 시작합니다. 이러한 제한의 논리적 분리를 반환하는 쿼리를 만들고 싶습니다. 고양이 이름이 F로 시작하는 고양이 또는 고양이의 이름이 F.로 시작하는 고양이 예 : (고양이 : [새끼 고양이]) 프리츠 : [], 프랭크 : [알, 배리], 찰리 : [프란]; 결과 집합에 모두 포함되어야합니다. Bob : []와 Mike : [Allen, Bosco]는 안됩니다.
몇 가지 다른 쿼리를 시도했지만 올바른 결과를 얻을 수 없었습니다.
Criteria criteria = session.createCritera(Cat.class)
.add(Restrictions.like("name", "F%);
이 쿼리는 이름이 F.로 시작
Criteria criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.like("kits.name", "F%");
이 쿼리는 이름 F. 내 문제가 시작하는 곳은 시작 새끼 고양이가있는 모든 부모 고양이를 반환 모든 부모 고양이를 반환, I 이 두 세트의 분리가 필요하다. 먼저 시도 :
Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.disjunction()
.add(Restrictions.like("name", "F%")
.add(Restrictions.like("kits.name", "F%");
이 쿼리는 작동하지 않습니다. 이전 쿼리와 마찬가지로 F로 시작하는 이름을 가진 자식이있는 부모 만 반환합니다.
Criteria.criteria = session.createCriteria(Cat.class)
.createAlias("kittens", "kits")
.add(Restrictions.or(
Restrictions.like("name", "F%"),
Restrictions.like("kits.name", "F%"));
API 설명서를 올바르게 읽는 경우이 쿼리는 이전 쿼리와 동일합니다. 앞의 두 쿼리와 동일한 결과를 얻으므로 의미가 있습니다.
나는 조건 검색을 통해 정확한 고양이 세트를 얻는 방법으로 난처한 입장에 놓이게됩니다.
두 개의 개별 쿼리를 실행 한 다음 결과 컬렉션을 정리할 수 있다고 가정하지만 불필요하게 비효율적 인 것처럼 보입니다.
어떤 제안에 감사드립니다. 야옹.