Grails 2.5.1(休眠3)标准多个连接到同一个表

时间:2016-09-12 15:13:44

标签: hibernate grails grails-2.5

我发现了类似的问题,但没有答案。

class SomeDomain {
    static hasMany= [productData:ProductData]
}

ProductData是简单的类型/值对

我正在尝试查找具有特定类型的多个产品的所有SomeDomains(在循环中)。目前,标准的相关部分如下:

SomeDomain.createCriteria.list {
  somedata.each { type, value ->
    productData {
      eq("type", type)
      eq("value", value)
    }
  }
}

但是,这只会与SQL生成一个连接:

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') 

显然,type_id永远不会成功,并且会检查= 4和= 5 ......

我真正喜欢的是对product_data的两个内连接...但是无法弄清楚如何强制这个。

我试过了     createAlias(“productData”,“product - $ {index}”) 这给了     org.hibernate.QueryException:重复的关联路径:productData

1 个答案:

答案 0 :(得分:0)

不确定为什么需要多个连接到同一个表?如果问题得到正确理解

String query="from someDomain sd join productData pd where pd.type in (:types) and pd.value in (:values) "
def inputParams=[:]
inputParams.values=['GC','P1']
inputParams.types=[4,5]
List resultsList = SomeDomain.executeQuery(query,inputParams,[readOnly:true,timeout:15])

pd.type可能必须是另一个连接,因为在调试中它试图获取.id所以添加另一个连接

  String query="from someDomain sd join productData pd join pd.types tp where tp.id in (:types) and pd.value in (:values) "

如果您想按照问题

中的建议进行多个联接
  String query="from someDomain sd join productData pd join pd.types tp, ProductData pd2 where tp.id in (:types) and pd.value in (:values) and pd2.something=pd.something"

然后关闭并查找链接到someDomain的productData,然后再次查找整个ProductData as pd2,然后确认pd2.something = pd.something

在HQL中使用逗号成为与现有查询无关的新查找。