我知道我的标题不清楚,但我不知道如何用几句话解释我的问题。
我有两个带有双向映射的类。 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.class
是Mother.class
的字段,而不是Father.class
的字段}。
我记得有一种方法允许您在一张表中保存一个Entity
,可以由许多不同的Entities
映射。我记得我需要在表格中添加一个字段来区分whe Image.class
是"绑定"到Father.class
或Mother.class
。
我无法在互联网上找到该文档。
答案 0 :(得分:4)
请注意"字段"不是描述关系的正确术语。 Father
和Mother
与Image
之间存在关系,这可能是单向的,即Image
无法知道它属于哪个实体至。
这可能是最合理的方式,如果没有充分理由要求双向关系,我建议你选择单向路线。要使关系单向,您必须使Mother
和Father
成为拥有方,即将图片ID放入其表格并从mappedby
中删除@OneToOne
同时从Image
完全删除映射。
如果真的需要知道并且需要Hibernate能够导航关系,那么你必须使用一个共同的超类(即使在那里也需要成为一个实体)没有实例)并且可能是每类继承。
除此之外,您还可以在Image
本身存储与图像相关的信息,并手动执行查找。