首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将实体映射到hibernate中的多个实体类型?

如何正确地将实体映射到hibernate中的多个实体类型?
EN

Stack Overflow用户
提问于 2020-06-23 15:26:58
回答 1查看 74关注 0票数 0

我没有冬眠的经验。现在,我正试图找出如何在多个关联中正确映射一个实体。让我澄清一下。假设我们有学生和经理实体。这两个实体应该与Address实体有一个OneToMany关联。首先,我知道我们需要在地址实体中保留学生或经理的参考资料。类似于下面的片段:

代码语言:javascript
复制
class Student{

    @Id
    public long id;

    @OneToMany(mappedBy="student")
    public Set<Address> addresses;
    
         //getters and setters
}
    
class Manager{
      @Id
      public long id;

      @OneToMany(mappedBy="manager")
      public Set<Address> addresses;
    
         //getters and setters
}

class Address{
       @Id
       public long id;

       @ManyToOne
       public Student student

       @ManyToOne
       public Manager manager;

}

我不确定这是不是正确的方法。看上去不太对劲。如果我们有另一个需要地址的实体,那么在Address类中需要另一个属性。那么,我如何正确地映射与其相关的其他实体中的地址实体呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 16:23:28

您不需要@OneToMany关系;@ElementCollection允许您实现此映射。你可以有多个实体(学生,经理,不管.)引用相同的可嵌入Address类。

看看@ElementCollection

ElementCollection映射可用于定义可嵌入对象的集合。这不是可嵌入对象的典型用法,因为对象不是嵌入在源对象的表中,而是存储在单独的集合表中。这与OneToMany类似,但目标对象是可嵌入的,而不是实体。

地址类别:

代码语言:javascript
复制
@Embeddable
public class Address {
   // ...
}

学生班:

代码语言:javascript
复制
public class Student{

    // ...

    @ElementCollection
    private List<Address> addresses;
    
    //getters and setters
}

经理班:

代码语言:javascript
复制
class Manager{
    // ...

    @ElementCollection
    private List<Address> addresses;
    
    //getters and setters
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62538323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档