0

编辑:评论解决的问题......

我们在 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 表。

但为什么?

4

0 回答 0