Grails 2.5.1 (hibernate 3) 标准多个联接到同一个表

2024-01-04

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

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


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

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"

然后开始查找链接到某个域的产品数据,然后再次查找整个域ProductData as pd2然后确认在哪里pd2.something = pd.something

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 2.5.1 (hibernate 3) 标准多个联接到同一个表 的相关文章

随机推荐