休眠与同一类对象的多个@OneToOne关系出现问题



我有以下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;
}

我现在面临的问题是,当我将Infodairy1设置为新的Dairy对象,然后检索Info时,dairy1dairy2都使用相同的dairy1对象进行初始化。我希望dairy2,但它使用相同的dairy1对象进行初始化。

对于您当前的类,Info的一个实例可以与 2 个Diary实例相关联。这就是为什么这里的定义@OneToOne不正确的原因。

在不知道您尝试解决的问题的情况下,仅基于您的代码,以下解决方案是可能的:

将关系定义为Info类中的@OneToManyDiary类中的@ManyToOne关系。要区分同一关系中Diary的实例,可以添加属性orderDiary并相应地设置值 1 或 2。

最新更新