비슷한 질문이 있지만 답변이 없습니다. Grails 2.5.1 (hibernate 3) criteria 여러 테이블이 동일한 테이블에 조인 됨
class SomeDomain {
static hasMany= [productData:ProductData]
}
ProductData
은 단순 유형/값 쌍내가 (루프)에 특정 유형의 여러 제품이있는 모든 SomeDomains을 찾기 위해 노력하고있다.
from some_domain this_ inner join product_data productdata_a1_ on this_.id=productdata_a1_.some_domain_id
where (productdata_a1_.type_id=4 and productdata_a1_.value='GC')
and (productdata_a1_.type_id=5 and productdata_a1_.value='P1')
을 분명히 결코 = 대한 and'd 수표에 성공 TYPE_ID 않을된다
SomeDomain.createCriteria.list {
somedata.each { type, value ->
productData {
eq("type", type)
eq("value", value)
}
}
}
그러나, 이것은 SQL과 결합 단 하나의 생성처럼 현재 기준의 관련 부분이 보인다 4 및 = 5 ...
실제로 제가 원하는 것은 product_data에 대한 두 개의 내부 조인입니다. 그러나이를 강제하는 방법을 알 수는 없습니다. 중복 연결 경로 : productData
여러가 같은 테이블에 조인해야하는 이유
나는 criteria 질의하지 HQL에서이 작업을 수행하기 위해 노력하고있어. HQL에서 작동하도록 할 수는 있지만, 이것은 루프로 만들어져 있습니다 (그래서 같은 테이블에 더 많은 조인이 필요할 수도 있습니다). a.value와 b.type을 일치시키기 위해 a.type이 필요하기 때문에 b.value ... a.type에 b.value를 사용할 수 없기 때문에 두 개의 "ins"가 작동하지 않습니다. 예 : 셔츠 [녹색 : – Trebla
... 또는 내 샘플 데이터 [4 : GC, 5 : P1]를 사용하여 someDomains를 검색하는 경우 [셔츠 : 파란색, 바지 : 녹색]로 인해 잘못된 ProductData가 표시됩니다. 나는 값 GC와 타입 5, 값 P1을 가진 타입 4의 제품을 가진 someDomains을 필요로한다. 해결책을 찾으면 타입 4, 값 P1의 someDomains가 정확하지 않을 것입니다. – Trebla
HQL에서 쿼리를 찾으려고 할 수도 있습니다. (요즘 대부분 사용하고 있기 때문에) 그러나 쿼리를 원할 때 말입니다. 개인적으로 나는 큰 차이를 볼 수 없다. 생성 된 기본 쿼리는 닫히거나 비슷합니다. 당신이 그것에 대한 전문가를 필요로 할 것 같아요. 행운을 빕니다. – Vahid