我有一个HQL问题(在Groovy/Grails中)我希望有人能帮助我。Hibernate HQL和Grails-如何比较集合?
我有一个一对多的标签集合上进行简单的资产对象。
class Asset { Set tags static hasMany = [tags:Tag] }
class Tag { String name }
我试图在HQL做:
用户通过在一些标签params.tags
(例如:常规Grails的岩石),并希望返回资产(S )有这些标签,只有那些确切的标签。
这里是我的HQL如果一个或多个标签的存在,返回资产在资产标签:
SELECT DISTINCT a FROM Asset a LEFT JOIN a.tags t WHERE t.name IN (:tags)
assetList = Asset.executeQuery(hql, [tags:tokenizedTagListFromParams]
上面的代码运行完美,但它真的像一个OR
。如果找到任何标签,它将返回该资产。
我只想要回那有那些完全相同的标签(在数量上也一样)的资产。
每次创建新标签时,我new Tag(name:xxx).save()
这样我就可以获取该被要求为每个标签的标签实例和唯一的ID。
我也试着将传入的标签转换为标签实例列表,每个标签都有Tag.findByName(t1)
,还有一个(唯一的)标签ID列表,上面的HQL没有运气。
我将不胜感激任何帮助/建议。
有趣的这实际上解决了我的问题,因为原来的错误实际上是我想要产生的行为。 – nhouser9 2017-05-08 21:32:30