編集:コメントによって解決された問題...
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 テーブルに参加していることを意味します。
しかし、なぜ?