【问题标题】:How to embed another entity in a Hibernate entity using its id?如何使用其 id 在 Hibernate 实体中嵌入另一个实体?
【发布时间】:2014-03-29 10:49:14
【问题描述】:

假设我有一个Role 类型,其中包含long idString name 等。我还有另一个User 类。每个用户都有一个roleId 列,该列将指向Role.id

在我的数据库中,我将创建 2 个表,一个用于用户,另一个用于角色。用户表中的roleId 将是role.id 表的外键。

我的问题是,我如何在 Hibernate 中映射它,这样我就可以在我的 User 类中拥有一个 Role role 列,并且能够执行 user.getRole().getName() 之类的操作?

【问题讨论】:

    标签: java mysql hibernate foreign-key-relationship


    【解决方案1】:

    From the manual:

    多对一关联在属性级别声明 注释@ManyToOne:

     @Entity
     public class User {
         @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
         @JoinColumn(name="roleId")
         public Role getRole() {
             return role;
         }
         ...
     }
    

    @JoinColumn 属性是可选的,默认值是一对一的,名字的串联 所有者侧的关系,_(下划线)和名称 拥有方的主键列。在这个例子中 company_id 因为属性名称是公司,公司的列 id 是 身份证。

    【讨论】:

    • 在这种情况下,我有多个角色,但每个用户一次只能有一个角色,我在看 ManyToOne 还是 ManyToMany ?
    • @ManyToOne。你几乎回答了自己:)
    • 是的,我最终意识到了这一点,但那时我已经输入了评论:)。任何机会你也可以看看这个:stackoverflow.com/questions/21971272/…
    • 那里的答案看起来不错。另请查看链接的可能重复问题。
    • 抱歉,我链接到了错误的问题。这就是我想让你看的内容:stackoverflow.com/questions/22042903/…
    【解决方案2】:

    只需将 yor 字段声明为相关实体,这样您的 User 类就会具有 private Role role 字段或类似的字段,并使用适当的 @OneToX 注释进行注释。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 2022-07-20
      • 2020-08-16
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多