如何在测试环境中为 GORM 中的多对多关联执行 HQL 连接?

How do I do HQL join for many-to-many associations in GORM in test environment?

我有以下具有多对多关系的域 类(ProductTag):

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),我的测试就会通过。

试试看:

Product.findAll 'from Product where tags.tag like ?', [ '%something' ]

所以问题不在于查询无效; HQL 查询按预期工作。然而,问题是我用来检查查询的代码在 Grails 的测试环境下是 运行。默认情况下,该环境中使用的 GORM 未正确配置为支持 HQL 和其他字符串类型查询。必须设置测试代码,以便 Grails 在 运行 连接它时使用正确的 GORM。

总而言之,这是我为解决问题所做的事情(我在 Grails 2 中运行宁此。5.x):

  1. @Domain([Product, Tag])
  2. 注释了测试 class
  3. @TestMixin(HibernateTestMixin)
  4. 注释了测试 class

有关详细信息,请查看 the official Grails documentation