hibernate - 使用不同的别名多次加入关联

标签 hibernate grails groovy

我认为,我遇到的问题是 Hibernate 中的一个错误(已跟踪 - https://hibernate.onjira.com/browse/HHH-879)。

我的问题是 - 是否有使用 grails 条件查询多次加入表的解决方法?

SQL 将是直截了当的:

SELECT s FROM Store AS s   
    INNER JOIN s.Products AS prod1  
    INNER JOIN s.Products AS prod2  
WHERE 
    prod1.Type = 'Shoes'   
AND 
    prod2.Type = 'Shirts' 

当我在 grails 标准查询中使用“createAlias”(一个用于 prod1,一个用于 prod2)时,我收到以下错误:

org.hibernate.QueryException:重复关联路径:studyTags
...

一种可能性可能是,使用 OR(一个单一的 JOIN 和 WHERE prod.Type = 'Shoes' OR 'Shirts')进行查询,然后过滤结果集。此解决方案的问题是,如果我为条件查询(最大结果)指定限制,则实际结果(过滤后)的条目可能少于指定的条目。

任何帮助,将不胜感激。

谢谢。

PS:我遇到这个问题的真实代码非常复杂。为了解决这个问题,我在 Store 和 Product 中使用了这个例子......我认为查询看起来像
Store.withCriteria{
    createAlias('products', 'prod1')
    createAlias('products', 'prod2')

    and{
        eq('prod1.Type', 'Shoes')
        eq('prod2.Type', 'Shirts')
    }
}

最佳答案

虽然这是一个老问题,但我在搜索我的解决方案时遇到了它。所以我发现 hibernate 中可能存在一个错误,使得 duplikacte 别名变得不可能。我使用的解决方法是使用纯 SQL 查找有限的“id”列表,并检查其他查询要求是否与列表匹配。在这个例子中,它可能是“

select x.id from XTable x join products prod1 on... join products prod1 on... where prod1.type= 'shoes' and prod.type = 'shirts';

然后检查
select x.id from XTable x where x.id in ("result of the query")

关于hibernate - 使用不同的别名多次加入关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7659039/

相关文章:

java - Grails:用 Hibernate 类替换 GORM

grails - Grails 3.2.8-无法从 Controller 访问Taglib〜g

groovy - "Use"在 groovy 中如何工作?

java - Oracle 中的 JPA 和 Flyway boolean 类型

java - Envers 如何处理架构更改?

javascript - pdf.js 在 getDocument 上失败

jenkins 管道在不同阶段使用不同的节点

java - 如何在grails中使用POST方法?

java - PersistentObjectException : detached entity passed to persist: com. 边缘.le.domain.Tag

java - Hibernate中如何设置外键实体