Gorm动态查找器与Grails注入属性类型

时间:2014-09-11 06:01:13

标签: grails gorm

我有两个域类如下:

class Field {

    static hasMany = [options: Option]

}

class Option {

  String caption

  static belongsTo = [field: Field]
  static mappedBy = [field: Field]

   static constraints = {
    caption maxSize: 255
   }
}

我的问题是:我何时使用field.options,何时使用Options.findAllByField()?在切换到HibernateTestMixin(使用内存数据库)之后,我使用field.options(grails注入属性类型)的单元测试现在开始失败。只有当我切换到Gorm动态查找器时,它们才会通过。我究竟做错了什么? :(

感谢。

1 个答案:

答案 0 :(得分:0)

有一件事,那就是使用mappedBy是错误的。如果您有多个相同类型的属性,则应将此用于关联。我建议删除该部分:

static mappedBy = [field: Field]

但这很可能无法解决您的问题。

如果你有一个字段实例(附加到hibernate会话),那么你应该使用自然:

Set options = field.options

当你的字段实例与hibernate会话分离并且没有加载它的选项关联时(因为延迟加载),那么发出field.options将抛出LazyInitializationException。

在测试中使用field.options时,请发布您获得的错误。也许您的字段实例已从会话中分离(这可能是由从事务服务抛出的RuntimeException引起的。)