当前位置: 首页 > 知识库问答 >
问题:

OneToMany列在创建enteries时未更新

曹涵润
2023-03-14

我有两个实体/表

为了简洁,删除了一些列

组别:

@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<>();

}

@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;

}

基于这个答案,我添加了以下内容

java prettyprint-override">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仍然没有创建任何条目。

共有1个答案

黎腾
2023-03-14

在您的代码中,在双向关系中,您使用mappedby属性将group实体标记为关系的所属方。因此,如果您使用GroupRepository实例来传播GroupUseringRouproup值,那么一切都会很好。也就是说,不是在UseringRoupRepository实例上调用save,而是使用GroupRepository实例来保存值,并且应该自动创建外键关联。使用AddUseringRoup(userInGroup)RemoveUseringRoup()方法向set in Group类添加或移除值。

groupRepository.save(group);

有关更多信息的相关帖子:Springboot在oneTOMany关系中添加问题

 类似资料:
  • 问题内容: 我有以下实体: 球队 } 和 USER_TEAM_ROLE 现在,当使用{UTR1,UTR3}更新包含例如Team.userTeamRoles = {UTR1,UTR2}的Team实体时,我希望删除UTR2。但是我现在的方法是,旧列表保持不变,并且只将UTR3添加到列表中。 这是我目前的做法: 我认为通过执行该列表将被重置,并且由于级联,先前的列表将被删除。 任何帮助表示赞赏。谢谢 问

  • 未创建我的exchange和dlq。我在下面的YML中有以下内容。我确实创建了一个匿名队列,但也没有发布消息。任何想法。

  • 我已经使用Hibernate将Java对象映射到PostgreSQL数据库。UserDetails类是用来添加用户的实体类,它包含一个名为Address的嵌入对象。 userdetails.java 生成的SQL查询如下所示,它显示列的添加顺序与声明列的顺序不同。 在Hibernate中添加哪些列有什么规则吗?

  • 我已经创建了纸张和Mcq问题之间的映射如下。 } 当我更新纸质实体时,它会删除所有MCQ。 SQL输出:

  • 问题内容: 我想定义具有2个TIMESTAMP字段的表,如下所示: 如何避免错误: 重点是保持表架构中和的所需行为。 问题答案: 猜猜这是一个老帖子,但实际上我想mysql在其最新版本中支持2 TIMESTAMP mysql 5.6.25,这就是我目前使用的时间。

  • Mysql不允许在同一数据库表中有两个自动更新时间戳列。但是,许多人喜欢为他们的表“创建”和“更新”列,因为这种信息很有用,所以必须有一些解决方法。根据我收集的内容,一列必须是日期时间,另一列必须是时间戳。datetime 列可以用作创建的列,当默认为 null 时,使用触发器插入时,它将自动采用当前时间戳值。时间戳列可以用作更新的列,并且可以配置为按照mysql文档的描述自动更新。这两个页面对于