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

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

我有两个带有双向映射的类. 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本身中存储有关谁与图像相关的信息,并手动进行查找.

标签:orm,jpa,hibernate,mapping,java

来源: https://codeday.me/bug/20191027/1942114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值