由其他许多不同实体映射的实体(使用Hibernate)

时间:2016-04-14 08:03:44

标签: java hibernate jpa orm mapping

我知道我的标题不清楚,但我不知道如何用几句话解释我的问题。

我有两个带有双向映射的类。 Image.class

@Entity
@Table(name = "image")
public class Image{

    @Id
    @Column(name = "id")
    @GeneratedValue
    Long id;

    @OneToOne(targetEntity = Father.class)
    @JoinColumn(referencedColumnName = "id", name="father")
    @Size(min = 1, max = 11)
    Father father;

}

Father.class

class Father{

      @Id
      @Column(name = "id")
      @GeneratedValue
      Long id;

      @OneToOne(mappedBy = "father")  
      Image pic;
}

现在,我想将Image.class用作其他类的字段。我们说我有Mother.class

 class Mother{

          @Id
          @Column(name = "id")
          @GeneratedValue
          Long id;

          @OneToOne(mappedBy = "mother")  
          Image pic;
    }

我的问题是:如何编辑"映射"是Image.class

当然Image.class不能包含Father father这样的字段,因为在上一个方案中,Image.classMother.class的字段,而不是Father.class的字段}。

我记得有一种方法允许您在一张表中保存一个Entity,可以由许多不同的Entities映射。我记得我需要在表格中添加一个字段来区分whe Image.class是"绑定"到Father.classMother.class

我无法在互联网上找到该文档。

1 个答案:

答案 0 :(得分:4)

请注意"字段"不是描述关系的正确术语。 FatherMotherImage之间存在关系,这可能是单向的,即Image无法知道它属于哪个实体至。

这可能是最合理的方式,如果没有充分理由要求双向关系,我建议你选择单向路线。要使关系单向,您必须使MotherFather成为拥有方,即将图片ID放入其表格并从mappedby中删除@OneToOne同时从Image完全删除映射。


如果真的需要知道并且需要Hibernate能够导航关系,那么你必须使用一个共同的超类(即使在那里也需要成为一个实体)没有实例)并且可能是每类继承。

除此之外,您还可以在Image本身存储与图像相关的信息,并手动执行查找。