1

私はJava(hibernate 3.1)でこのようなコードを持っています:

EntityManager manager = ...;
Entity parent = manager.find(...);
removeChildrenSQL(parent, manager); // here DELETE FROM ... is executed
manager.flush();

削除されたエンティティが休止状態から見えないようにする必要があります。

私は試しました(そしてこれらは機能しませんでした):

1)manager.refresh(parent);

2)削除されたエンティティを手動で更新します

3)すべての子で親をリロードします。

どうすればいいですか?

4

2 に答える 2

0

試す

manager.detach(parent);
parent = manager.find(Entity.class, parent.getId());

(特に、子を削除する前に変更した場合は、子を切り離す必要がある場合もあります)

于 2012-05-26T22:25:41.450 に答える
0

すべての子供を呼びsession.evict(childEntity)ます。ここで、セッションは休止状態のセッションです。

休止状態のセッションを取得するには、次を使用します。

org.hibernate.Session session = (org.hibernate.Session)manager.getDelegate();

@PersistenceContextまたは、セッションBeanを使用している場合は、アノテーションを使用して注入することができます。

更新:問題はHibernateのキャッシュに関連している可能性があります。設定してみてください

<shared-cache-mode>NONE</shared-cache-mode>

あなたのprersistence.xml。その後、manager.refresh(parent)がトリックを実行する必要があります。

Update2:または、子供がLAZYコレクションに含まれている可能性があります。この場合、次の2つの解決策があります。子供に次の注釈を付けます。

@OneToMany(cascade=CascadeType.REFRESH,fetch=FetchType.LAZY)

その場合でも、manager.refresh(parent);を実行する必要があります。または使用:

 Hibernate.initialize(parent.getChidren());
于 2012-05-26T22:26:04.477 に答える