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

时间:2015-11-24 10:11:30

标签: grails gorm

我有以下具有多对多关系的域类(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),我的测试就会通过。

2 个答案:

答案 0 :(得分:0)

试试:

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

答案 1 :(得分:0)

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

总之,以下是我为解决问题所做的事情(我在Grails 2.5.x中运行此操作):

  1. 使用@Domain([Product, Tag])
  2. 为测试类添加注释
  3. 使用@TestMixin(HibernateTestMixin)
  4. 为测试类添加注释

    有关详情,请查看the official Grails documentation