私はSpringのJPAとpostgresデータベースを使用しています。 私は2つのエンティティ、つまりグループとユーザーを持っています。 私はSpringのCrudRepositoryインタフェースを使ってリポジトリを作成しました。JPA- ManyToManyリレーションセカンダリテーブルからすべてのエンティティを削除します
@Entity
public class Group {
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
name="group_user_bridge",
[email protected](name="joinTbl_groupid", referencedColumnName="groupid"),
[email protected](name="joinTbl_agentid", referencedColumnName="userid")
)
private Set<User> users;
....
}
クラスのユーザー
@Entity
public class User {
@ManyToMany(mappedBy="users",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List<Group> groups;
.....
}
Repository.save:正常に動作します。 IはgroupRepository.delete(groupEntity)を使用してグループを削除すると
@Test
public void addGroup(){
Group hg = new Group();
User h1 = new User();
User h2 = new User();
some setters for user entity object
hg.setName("testGroup");
... some setters for groups
HashSet<User> groupMembers = new HashSet<User>();
groupMembers.add(h2);
groupMembers.add(h1);
hg.setGroupMembers(groupMembers);
hg = groupRepository.save(hg);
質問
は、グループ、結合テーブルからグループ及びユーザの関連付けを削除します。
でも、ユーザテーブルからユーザを削除します。実際にはユーザーレコードは削除されてはならない。
ここでユーザーを削除しないようにするにはどうすればよいですか?
私はグループとユーザーレコードをソフト削除するために@SQLDeleteアノテーションを使用しています。しかし、私は結合テーブルレコードのために同じことを達成することができません。 結合テーブルのレコードは、私が避けたいテーブルからハード削除されます。
どのようにして結合テーブルレコードのハード削除を防止できますか?
ありがとうございます。 save, delete, update, evict, lock, replicate, merge, persist
だから、それはあなたが削除することを意味します:Hibernate docsこれは、次の操作のカスケードを引き起こすであろうことを示している
@ManyToMany(cascade=CascadeType.ALL)
:
返信いただきありがとうございます。 SAVE_UPDATEをチェックしてチェックします。ユーザーがグループ全体に移動できるシナリオを検討していました。グループを一度削除すると、ユーザーは元のままにしておく必要があります。 – Yogesh