我有两个域类如下:
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动态查找器时,它们才会通过。我究竟做错了什么? :(
感谢。
答案 0 :(得分:0)
有一件事,那就是使用mappedBy是错误的。如果您有多个相同类型的属性,则应将此用于关联。我建议删除该部分:
static mappedBy = [field: Field]
但这很可能无法解决您的问题。
如果你有一个字段实例(附加到hibernate会话),那么你应该使用自然:
Set options = field.options
当你的字段实例与hibernate会话分离并且没有加载它的选项关联时(因为延迟加载),那么发出field.options
将抛出LazyInitializationException。
在测试中使用field.options时,请发布您获得的错误。也许您的字段实例已从会话中分离(这可能是由从事务服务抛出的RuntimeException引起的。)