4

複数の「部屋」を含む「家」というエンティティがあり、次のように設定されています。

House.java:

@Entity
public class House {
    @OneToMany(mappedBy = "house", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Item> rooms;
    ...
}

Room.java:

@Entity
public class Room {
    @ManyToOne
    @JoinColumn(name = "houseId")
    private House house;
    ...
}

ここで、エンティティ マネージャーを介して部屋を直接削除しても、部屋は削除されません。

getEntityManager().contains(room); // returns true
getEntityManager().remove(room);
getEntityManager().flush();

コレクションから削除すると、削除されます。

house.getRooms().remove(room);
getEntityManager().persist();
getEntityManager().flush();

誰でもこの動作を説明できますか? ありがとう!

4

1 に答える 1

1

2 番目の例ではpersist、部屋の削除を効果的にするために家にする必要があります。

最初のコードでは、オブジェクトを削除しEntityManager persistence context(エンティティ マネージャーは削除を登録します)、flush()データベースから部屋を削除するこの操作を適用します。

2番目の例では、次のように呼び出します。データベースからオブジェクトを削除するList.remove()ことはお勧めしません。あなたが家を変更していて、エンティティマネージャーにこの変更を適用するように指示する必要があるため、呼び出すときに機能します。孤立していると検出されたため、削除された部屋を削除して残りを行いますEntityManagerorphanRemovalentityManager().persist(house)house.getRooms().remove(room)EntityManager.persist()orphanRemoval

于 2013-08-15T10:32:11.200 に答える