JPA(hibernate)OneToMany关系和null
我在一个班级的学生和一个学生之间有一个关系 如果没有常驻信息,则不应存在ResidentInfo,但ResidentInfo不是必需的 以下是我的课程:JPA(hibernate)OneToMany关系和null,jpa,one-to-many,Jpa,One To Many,我在一个班级的学生和一个学生之间有一个关系 如果没有常驻信息,则不应存在ResidentInfo,但ResidentInfo不是必需的 以下是我的课程: public class Resident { ... @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, mappedBy = "resident") @Cascade({org.hibernate.annota
public class Resident {
...
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, mappedBy = "resident")
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public List<ResidentInfo> infos;
}
public class ResidentInfo {
...
@ManyToOne(optional = false)
public Resident resident;
public String label;
public String value;
}
那么如何解决这些问题呢?要解决您的问题,首先应该在ResidentInfo类中提供一个setter方法来设置info实例所属的常驻对象。它可能看起来像这样
public void setResident(Resident resident) {
this.resident = resident;
}
public void addResidentInfo(ResidentInfo residentInfo) {
residentInfo.setResident(this);
infos.add(residentInfo);
}
此外,向常驻对象添加ResidentInfo对象只能在常驻类中完成。您应该提供一种方法,将新的ResidentInfo对象添加到包含的列表中。添加ResidentInfo对象的一部分是设置与其关联的常驻对象。代码可能是这样的
public void setResident(Resident resident) {
this.resident = resident;
}
public void addResidentInfo(ResidentInfo residentInfo) {
residentInfo.setResident(this);
infos.add(residentInfo);
}
通过这些行,列表中的每个对象都包含对与其关联的常驻实例的引用。因此,在持久化所有对象时,将设置必要的引用(以及任何必需的ID)
另一方面,您应该检查JPA注释中的级联信息。您提供了两个含义完全不同的注释。您好,我已取消了“cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH}”是否正确?我还测试了您的代码,这只起到部分作用,当我想向现有居民添加新的居民信息时,这不起作用。您的意思是,它不起作用?使用指定的方法添加新的ResidentInfo时会产生什么结果?我没有错误,但是没有插入所有ResidentInfo记录。您可以提供添加ResidentInfo记录的代码段吗?我解决了这个问题,原因是我的列表未初始化,导致了空异常