编辑:评论解决的问题......
我们在 Grails 中有这样的域类标准代码:
class Foo {...}
class Bar {
Foo foo
}
没有任何配置,我的理解是在加载 Bar 的对象时,Foo 是延迟加载的。意味着如果我这样做:
def barList = Bar.all
所有 bar 对象的 Foo 都未加载,并且如果 Foo 对象在数据库中不再存在,Bar.all 不会由于延迟加载而失败,但在尝试读取丢失的对象时会失败。
但是,在我们的设置中,Foo 是不同数据库的一部分,条目可能会被删除。因此,Bar 中没有 Foo 关系的外键。如果发生这种情况,则应忽略此类 Bar 对象。所以我的方法只是:
def barList = Bar.all
barList.each {
try {
// do something a.o. with the foo relation
}
catch (ObjectNotFoundException e) {
// place some warnings in the log, but continue with next
}
}
遗憾的是,Bar.all 已经因 ObjectNotFoundException 而失败,这意味着 GORM/Hibernate 已经加入了 Foo 表。
但为什么?