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

Hibernate@ManyTo使用桥接实体的许多关系?

漆雕正奇
2023-03-14

我设计了一个多对多的关系,使用了两个木偶关系,如下所示:

在这里,

  • 用户必须至少具有一个或多个角色
  • 角色可以不属于任何用户,也可以属于多个用户

在这个场景中,这个ER图关系是真的吗?

而且,Hibernate定义也可以吗,或者是否需要更新?

@Entity
public class User {

     // ...

    @ManyToMany(cascade = CascadeType.MERGE)
    @JoinTable(name = "user_role",
        joinColumns = @JoinColumn(name = "user_id", nullable = false),
        inverseJoinColumns = @JoinColumn(name = "role_id")
    )
    private Set<Role> roles = new HashSet<>();

    public void addRole(Role role) {
        roles.add(role);
        role.getUsers().add(this);
    }

    public void removeRole(Role role) {
        roles.remove(role);
        role.getUsers().remove(this);
    }
}
@Entity
public class Role {
    // ...

    @ManyToMany(mappedBy = "roles")
    private Set<User> users = new HashSet<>();

    public void addUser(User user) {
        users.add(user);
        user.getRoles().add(this);
    }

    public void removeUser(User user) {
        users.remove(user);
        user.getRoles().remove(this);
    }
}

共有1个答案

羊舌承颜
2023-03-14

这似乎是正确的。也许你可以用List代替Set。此外,您还可以使用CascadeType.Persist。

如需详细资讯,请参阅https://vlamihalcea . com/the-best-way-to-use-the-manytomany-annotation-with-JPA-and-hibernate/

 类似资料:
  • 我正在尝试处理一个对我来说相当复杂的表格... 我们有收藏,其中包含书籍(OneTo多国),文章(OneTo多国)及其作者(ManyTo多国)。 用户可以编辑一本书:他可以添加或删除一篇文章,还可以为每篇文章添加或删除一些作者。有嵌套表单:book 实体描述看起来很好,数据库是由控制台生成的,看起来是一致的。 如果我不必与使用图书版表单的作者打交道,这就很好了。如果作者存在,我有一个重复条目错误。

  • 我有以下代码行: log4net。后勤经理。GetLogger(“m”)。调试(DateTime.Now.ToString(“hh:mm:ss.fff”)“Check-1”); 设置=会话。CreateQuery(“来自设置s”)。UniqueResult Log4net. LogManager. GetLogger("m"). Debug(DateTime. Now. ToString("hh:

  • 我在连接Laravel中的数据库模型时遇到问题。 现在,我想把它们连接起来,就像,每个用户可以有多个公司,每个公司都有自己的company_details。 我的用户。php模型如下所示: 如何从company_details表中获取值?

  • 问题内容: 问题在标题中: 如何将多对多关系表作为实体? 问题答案: 我会说,你的问题很合理。看看这个文档部分:第24章最佳实践。摘录: 不要使用外来关联映射: 真正的多对多关联的实际测试案例很少见。大多数时候,您需要存储在“链接表”中的其他信息。在这种情况下,最好将两个一对多关联用于中间链接类。实际上,大多数关联是一对多和多对一的。因此,在使用任何其他关联样式时,您应谨慎进行。 我们正在处理的方

  • 所以我在项目中使用了hsqldb,一切都很好。然后我将数据库切换到MySql,问题开始出现。当试图发布新对象时,我在控制台中收到以下错误: 我的application.properties 我的人.class 我的权利.class 测试控制器 人物刀 邮差 Pom依赖项(我知道太多了,因为我开始尝试一切让它工作) 配置类 当试图持久化任何其他没有太多类型的对象时,它会工作得很好。 可能是什么问题?

  • 问题内容: 我有两个表: 通常,我会创建一个映射表’ ‘来将这些表链接成多对多关系。 这是最好的方法吗?我应该将s的列表存储在xml列中,而不是存储在“事件”表中吗? 我使用带有Linq的.NET 3.5 / 4作为DAL(尽管我认为这可能与所提出的设计问题无关)。 有兴趣看看人们的意见是什么。 谢谢。戴夫 问题答案: 映射表绝对是执行此操作的最佳方法-实体框架会将映射表转换为两侧的实体集合,并且

  • 尽管已经讨论了这个错误,但我不知道如何解决我的问题。我读到这个问题可能会被映射,所以我尝试了不同的选择,但问题仍然存在 控制台: Model.java: Article.java

  • 问题内容: 另一个hibernate问题…:P 使用Hibernate的Annotations框架,我有一个实体。每个人都可以有一个朋友的集合:其他的集合。但是,我还无法弄清楚如何在由s 列表组成的类中创建多对多关联(使用用户友好中间表)。 这是User类及其注释: 用户- 朋友映射表只有两列,这两列都是该表列的外键。两列是(应映射到当前用户)和(指定当前用户的朋友的ID)。 问题是,即使我已经预