我知道我的标题不清楚,但我不知道该如何用几句话来解释我的问题.
我有两个带有双向映射的类. 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不能具有类似于父亲父亲的字段,因为在最后一种情况下,Image.class是Mother.class的字段,而不是父亲.class的字段.
我记得有一种方法可以让您在一个表中保存一个可以由许多不同实体映射的实体.我记得我需要在表中添加一个字段,以区分Image.class是“绑定”到Father.class还是Mother.class.
我再也无法在互联网上找到该文档.
解决方法:
注意,“字段”不是描述关系的正确术语.父亲和母亲与Image有关系,这可能是单向的,即Image不会知道它属于哪个实体.
这可能是最明智的选择,如果没有充分的理由要求建立双向关系,我建议您采用单向路线.要使关系成为单向关系,您必须将父亲和母亲作为拥有方,即将图像ID放入其表中,并从其@OneToOne中删除mapbyby,同时从Image中完全删除映射.
如果您确实需要知道这一点,并且需要Hibernate能够导航该关系,则必须使用一个公共的超类(即使没有实例也必须是一个实体),并且可能每个类都继承表.
除此之外,您还可以在Image本身中存储有关谁与图像相关的信息,并手动进行查找.