我认为,我遇到的问题是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'Birts')进行查询,然后过滤结果集,可能有一种可能性。此解决方案的问题在于,如果我为条件查询指定了限制(最大结果),则实际结果(在过滤之后)可能具有比指定的更少的条目。
任何帮助都将不胜感激。
感谢。
PS:我的真实代码,我遇到这个问题非常复杂。为了解决这个问题,我在商店和产品中使用了这个例子...我认为查询看起来像
Store.withCriteria{
createAlias('products', 'prod1')
createAlias('products', 'prod2')
and{
eq('prod1.Type', 'Shoes')
eq('prod2.Type', 'Shirts')
}
}
答案 0 :(得分:0)
虽然这是一个古老的问题,但在搜索我的解决方案时,我才知道它。所以我发现hibernate中可能存在一个错误,使得duplikacte别名变得不可能。我使用的工作是使用纯SQL来查找有限的“id”列表,并检查其他查询请求是否与列表匹配。在这个例子中它可能是“
git submodule
然后检查
select x.id from XTable x join products prod1 on... join products prod1 on... where prod1.type= 'shoes' and prod.type = 'shirts';
答案 1 :(得分:-3)
你试过这个吗 - 我想这会归还所有包含“Shoes”和“Shirts”类型产品的商店
Store.withCriteria{
createAlias('products', 'prod')
and{
eq('prod.Type', 'Shoes')
eq('prod.Type', 'Shirts')
}
}