0

これは私の削除方法です:

public void removeIletisimAdresi(Integer index){
              getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index))
        }

これが私の親子関係です

...

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity= IletisimBilgileri.class,  mappedBy = "user")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<IletisimBilgileri> iletisimBilgileri = new ArrayList<IletisimBilgileri(0);

...

これは私の子供です:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Kullanici")
private Users user ;

したがって、remove メソッドを呼び出して、entityManager.merge(user) のように親を更新すると、次のような例外がスローされます。

原因: org.hibernate.ObjectDeletedException: 削除されたインスタンスがマージに渡されました: [com.medikalborsasi.model.IletisimBilgileri#]

..

どうすればこの問題を解決できますか?

4

2 に答える 2

2

私は問題があなたのコードだけにあると思います、

getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index))

マッピングは、休止状態から 1 つのエンティティを削除すると、他の依存エンティティから同じエンティティが削除されるようにする必要があります。例:

Class A
{
     /* List of B entity(child) */
     List<B> listOfB;

}

Class B
{
     /* reference of A(parent) */
     A a;
}

だからあなたが電話すれば

hibernateSession.delete(b);

A に存在するリストから b の参照を削除する必要があります。A のリストから B の参照を明示的に削除する必要はありません。

getA().getListOfB.remove(getA().getListOfB().get(someIndex));

この小さな例で問題が解決されることを願っています。

于 2012-10-25T10:58:21.007 に答える
-1

エンティティを削除する前に、このエンティティは状態を管理する必要があります。関数、、などの一部を使用できますmergefind閉じた後EntityManager、そのすべてのエンティティが切り離されます。

public void remove(Person p) {
    Perosn p2 = em.merge(p);
    em.remove(p2);
}
于 2012-10-25T10:16:05.300 に答える