hibernate - Grails 2.5.1( hibernate 3)条件多个联接到同一表

标签 hibernate grails grails-2.5

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

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

ProductData是简单的类型/值对

我正在尝试查找具有某种类型的多个产品的所有SomeDomain(循环)。当前,条件的相关部分如下所示:
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"

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

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

关于hibernate - Grails 2.5.1( hibernate 3)条件多个联接到同一表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453576/

相关文章:

hibernate - 处理没有参数的 "multipart/form-data"请求的异常

grails - Groovy 闭包 : How does the definition of Grails url mappings work

grails - Grails @Transactional 与 Spring @Transactional 注释之间的差异

grails - 在 Grails 中登录时强制浏览器使用 HTTPS

grails - 使用geb进行功能测试的依赖性

java - Hibernate 标准排序依据

java - 在带 Hibernate 的 JPA 2 中强制传递持久性顺序?

java - JPA 中的哪些操作绕过持久性上下文/缓存并直接在数据库中调用?

grails - 无法在 Grails 3 中捕获数据库异常

validation - Grails 默认可为空约束