插入一张多对多表并加入表休眠

Posted

技术标签:

【中文标题】插入一张多对多表并加入表休眠【英文标题】:Insert into one table of ManytoMany and joining table hibernate 【发布时间】:2021-11-29 09:37:02 【问题描述】:

您好,我是 Hibernate 的新手,正在尝试构建一个 Rest APP。

如上图所示,我在数据库中有 3 个表。

USERS 表与 GROUPS 表有 ManyToMany 关系,USER_GROUP 是关联表。

我正在使用 ORM、Hibernate 和 CurdRepository。

我可以使用 CurdRepository 的 save() 方法插入用户表和组表。

现在我正在尝试仅在 GROUPS 表和 USER_GROUP 表中添加一行。谁能引导我走向正确的方向?

例如:

我想在 GROUPS 表中添加一个 groupid,然后将它与一个用户 id 关联

假设我想在 GROUPS 中插入 (10) groupid,在 USER_GROUP 表中插入 (14,10)。

ORM 是否可行,如果可以,如何?

提前致谢

【问题讨论】:

【参考方案1】:

网上有很多关于这个模型的文章来展示如何使用 Hibernate。这是我通过谷歌搜索“休眠用户组示例”快速找到的一篇文章:https://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-annotations-example

【讨论】:

【参考方案2】:

要使用现有的连接表,USE_GROUP,用户实体将如下所示。

@Entity
public class Users 
    @Id
    private Integer userid;

    private String password;

    @ManyToMany(cascade =  CascadeType.MERGE, CascadeType.PERSIST )
    @JoinTable(name = "USER_GROUP", joinColumns =  @JoinColumn(name = "USERID") , 
        inverseJoinColumns =  @JoinColumn(name = "GROUPID") )
    private Set<Groups> groups;

    // Getter, Setter

然后客户端代码,添加新用户和组,将如下所示。

User user = new User()
// set password , etc
Set<Groups> groups = new HashSet<>();
Group group = new Group();
// set 
groups.add(group);

user.setGroups(groups);

userRepository.save(user);

【讨论】:

我做了同样的事情,但我有疑问。有人建议我实现单例设计模式,所以使用 new 关键字是个好主意吗?有没有更好的方法?

以上是关于插入一张多对多表并加入表休眠的主要内容,如果未能解决你的问题,请参考以下文章

Flask-msearch python ,在多对多表上添加 msearch

在休眠中的多对多映射中仅插入一个表

多个 INSERTS 到一个表和多对多表

多对多表的设计小案例

多对多表应该有一个主键吗?

无法获取多对多表属性的数据