我有以下具有多对多关系的域类(Product
和Tag
):
class Product {
static belongsTo = Tag
static hasMany = [tags: Tag]
String name
Set tags
}
和
class Tag {
static hasMany = [products: Product]
String tag
Set products
}
每次运行以下HQL时,我什么都没得到:
select p from Product p join p.tags t where t.tag like '%'
我确定数据存储区中有数据,因为如果我更改结构使得关联是一对多(p.tag
而不是p.tags
),我的测试就会通过。
答案 0 :(得分:0)
试试:
Product.findAll 'from Product where tags.tag like ?', [ '%something' ]
答案 1 :(得分:0)
所以问题不在于查询无效; HQL查询按预期工作。但问题是,我用来检查查询的代码是在Grails'测试环境。默认情况下,该环境中使用的GORM未正确配置为支持HQL和其他String类型查询。必须设置测试代码,以便Grails在运行时使用正确的GORM。
总之,以下是我为解决问题所做的事情(我在Grails 2.5.x中运行此操作):
@Domain([Product, Tag])
@TestMixin(HibernateTestMixin)
有关详情,请查看the official Grails documentation。