我有两个实体/表
为了简洁起见,删除了一些列
组:
@Entity
@Table(name = "groups", indexes = {@Index(name = "groups_index", columnList = "id", unique = true)})
public class Group implements Serializable {
@OneToMany(targetEntity = UserInGroup.class, mappedBy = "group")
private Set<UserInGroup> userInGroups = new HashSet<>();
}
UserInGroup:
@Entity
@Table(name = "user_in_group", indexes = {@Index(name = "user_in_group_index", columnList = "group_id,user_id", unique = true)})
public class UserInGroup implements Serializable {
@ManyToOne
@JoinColumn(name = "group_id", referencedColumnName = "id")
private Group group;
}
我已经提到了这些链接1,2和3。
我做了他们概述的事情
现在,我在UserInGroup表中创建了一个条目,但是仍然没有使用在UserInGroup表中创建的新条目来更新组实体。
组未更新
在UserInGroups中创建的条目
在组中创建的条目
编辑:
基于此answer,我添加了以下内容
UserInGroup userInGroup = new UserInGroup().setGroup(group).setUser(creatorUser).setGroupRoleEnum(GroupRoleEnum.ADMIN);
group.addUserInGroup(userInGroup);
groupRepository.save(group);
public void addUserInGroup(UserInGroup userInGroup) {
if (userInGroups == null) {
userInGroups = new ArrayList<>();
}
userInGroups.add(userInGroup);
userInGroup.setGroup(this);
}
但是表UserInGroup仍未创建任何条目。
最佳答案
在代码中,在双向关系中,您使用Group
属性将mappedBy
实体标记为关系的拥有方。因此,如果您使用GroupRepository
实例传播Group
和UserInGroup
值,则所有内容都可以正常使用,即不要调用UserInGroupRepository
实例上的save使用GroupRepository
实例来保存值和外键关联应自动创建。使用addUserInGroup(userInGroup)
和removeUserInGroup()
方法向Group类中的集合添加或删除值。
groupRepository.save(group);
有关更多信息的相关文章:Springboot add problem in oneTOMany relation