取得したばかりのオブジェクトのリストの JDO 永続性に問題があります。
私がやりたいことは次のとおりです。
- 「注文」のリストを取得する
- 1 つのプロパティ「ステータス」を変更します
- 「オーダー」の一括更新
私がこれまでに得たのは、「IDを持つオブジェクト...は別のオブジェクトマネージャーによって管理されています」です。しかし、待ってください。Spring がなければ、このような問題に直面したことはありません。
次のようにデバッグしようとしました:
List<Orderr> orders = orderDao.findByIdAll(ordersKeys);
for(Orderr o : orders) {
System.out.println(JDOHelper.getPersistenceManager(o).hashCode());
//hashcode is 1524670
o.setSomething(somevalue);
}
orderDao.makePresistentAll(orders); //hashcode inside is 31778523
makePersistentAll は次のことしか行いません。
try {
System.out.println(getPersistenceManager().hashCode());
getPersistenceManager().makePersistentAll(entities);
} finally {
getPersistenceManager().close();
}
私のDAOはすべて JdoDaoSupport を拡張しています。PMFはスプリングで注入管理。
最後に、質問があります。findByIdAll の後で永続化マネージャーが閉じられるのはなぜですか? または、なぜ新しい持続性マネージャーのインスタンスを取得するのですか? もちろん、私の findByIdAll メソッドは永続化マネージャーで close を呼び出しません。
もちろん、「注文」ごとに makePersistent を呼び出すと、うまく機能します。しかし、それはビジネスとデータベースロジックの階層化を壊します...
UPD 春に管理された PersistenceManager に移行した後、makePersistentAll へのすべての呼び出しがまったく機能しないことがわかりました。春の前に私は単純な古い PMF.get() ヘルパーを使用しましたが、すべてがピカピカでした!