我有以下Hibernate映射。我想将两个@OneToOne映射映射到相同的类对象,但遇到了问题。
信息类
public class Info {
@Id
@Column(name="info_id")
private String info_id;
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval = true, mappedBy = "info")
private Diary dairy1;
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval = true, mappedBy = "info")
private Diary dairy2;
// I use this method to set the dairy
public void setDairy(Dairy dairy) {
if (getDairy1() == null) {
setDairy1(dairy);
} else if (getDairy2() == null) {
setDairy2(dairy);
}
}
// OTHER GETTERS EN SETTERS OMITTED
}
乳品类
public class Dairy {
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "info_id")
private Info info;
}
我现在面临的问题是,当我将Info
dairy1
设置为新的Dairy
对象,然后检索Info
时,dairy1
dairy2
都使用相同的dairy1
对象进行初始化。我希望dairy2
为空,但它使用相同的dairy1
对象进行初始化。
对于您当前的类,Info
的一个实例可以与 2 个Diary
实例相关联。这就是为什么这里的定义@OneToOne
不正确的原因。
在不知道您尝试解决的问题的情况下,仅基于您的代码,以下解决方案是可能的:
将关系定义为Info
类中的@OneToMany
和Diary
类中的@ManyToOne
关系。要区分同一关系中Diary
的实例,可以添加属性order
Diary
并相应地设置值 1 或 2。