48

特定のエンティティが切り離されているかどうかをJPA EntityManagerに問い合わせる方法はありますか? この SO 投稿は同様の問題について議論していますが、エンティティの分離ステータスについてJPA EntityManagerを照会する方法を示していません。私はJPAの方法を好むでしょう。それ以外の場合はHibernate固有です。

4

2 に答える 2

48

指定されたエンティティが現在の によって管理されているかどうかを確認するには、PersistenceContextを使用できますEntityManager#contains(Object entity)

于 2012-10-30T14:30:32.050 に答える
24

Piotr Nowicki の回答は、エンティティが管理されているかどうかを判断する方法を提供します。エンティティがdetachedかどうかを調べるには、それが以前に管理されていたかどうかを知る必要があります (つまり、永続化またはfind操作から取得されたなどによってデータベースから取得された)。Hibernate は「エンティティの状態履歴」を提供しないため、簡単に言えば、これを行う 100% 信頼できる方法はありませんが、ほとんどの場合、次の回避策で十分です。

public boolean isDetached(Entity entity) {
    return entity.id != null  // must not be transient
        && !em.contains(entity)  // must not be managed now
        && em.find(Entity.class, entity.id) != null;  // must not have been removed
}

上記は、 がエンティティ クラスであり、主キーであるパブリック フィールドがあることを前提とemEntityManagerEntityいますid@GeneratedValue(また、エンティティがデタッチされた後、この ID を持つ行が外部プロセスによってデータベース テーブルから削除されていないことも前提としています。)

于 2016-11-10T09:41:26.813 に答える