栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在JPA或Hibernate中更新ManyToMany关系

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在JPA或Hibernate中更新ManyToMany关系

问题是一个

Owning Entity
问题。

假设它

Staff
是的子类
User
,那么您的问题是关系中只有一方是拥有实体。将
mappedBy ="groupMemberList"
使得
Group
实体所属的实体,因此仅改变该实体被持久化。这意味着,你必须更新
groupMemberList
Group
这两种情况下的实体。如果您有一个“
a”的组列表,
User
则必须遍历该组列表并将其添加
User
到其中。该
groupList
User
仅用于检索。

给定

User
GroupMember
实体:

@Entitypublic class User {    @Id @GeneratedValue    private Long id;    @ManyToMany(mappedBy = "groupMemberList")    private List<GroupMember> groupList;@Entitypublic class GroupMember {    @Id @GeneratedValue    private Long id;    @ManyToMany    private List<User> groupMemberList;

然后:

// create starting user and membergroup    tx.begin();User user = new User();em.persist(user);GroupMember group = new GroupMember();em.persist(group);tx.commit();em.clear();// update users for groupId 2System.out.println("update users for groupId 2");tx.begin();List<User> users = new ArrayList<>();users.add(user);group.setGroupMemberList(users);em.merge(group); tx.commit();em.clear();// update groups for userId 1 -- doesn't work, not owner of relationshipSystem.out.println("update groups for userId 1 -- doesn't work, not owner of relationship");tx.begin();List<GroupMember> groups = new ArrayList<>();groups.add(group);user.setGroupList(groups);em.merge(user); tx.commit();em.clear();// update groups for userId 1 -- worksSystem.out.println("update groups for userId 1 -- works");tx.begin();for ( GroupMember groupMember: groups) {    groupMember.getGroupMemberList().add(user);    em.merge(groupMember); }tx.commit();em.clear();

提供以下SQL输出:

Hibernate: insert into User (id) values (?)Hibernate: insert into GroupMember (id) values (?)update users for groupId 2Hibernate: select groupmembe0_.id as id1_0_0_ from GroupMember groupmembe0_ where groupmembe0_.id=?Hibernate: select groupmembe0_.groupList_id as groupLis1_1_0_, groupmembe0_.groupMemberList_id as groupMem2_1_0_, user1_.id as id1_4_1_ from GroupMember_User groupmembe0_ inner join User user1_ on groupmembe0_.groupMemberList_id=user1_.id where groupmembe0_.groupList_id=?Hibernate: select user0_.id as id1_4_0_ from User user0_ where user0_.id=?Hibernate: insert into GroupMember_User (groupList_id, groupMemberList_id) values (?, ?)update groups for userId 1 -- doesn't work, not owner of relationshipHibernate: select user0_.id as id1_4_0_ from User user0_ where user0_.id=?Hibernate: select groupmembe0_.id as id1_0_0_ from GroupMember groupmembe0_ where groupmembe0_.id=?update groups for userId 1 -- worksHibernate: select groupmembe0_.id as id1_0_0_ from GroupMember groupmembe0_ where groupmembe0_.id=?Hibernate: select groupmembe0_.groupList_id as groupLis1_1_0_, groupmembe0_.groupMemberList_id as groupMem2_1_0_, user1_.id as id1_4_1_ from GroupMember_User groupmembe0_ inner join User user1_ on groupmembe0_.groupMemberList_id=user1_.id where groupmembe0_.groupList_id=?Hibernate: delete from GroupMember_User where groupList_id=?Hibernate: insert into GroupMember_User (groupList_id, groupMemberList_id) values (?, ?)Hibernate: insert into GroupMember_User (groupList_id, groupMemberList_id) values (?, ?)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号