Hibernate 使用关系“OneToMany”保存模型
嗨 我有这样的模型:Hibernate 使用关系“OneToMany”保存模型,hibernate,jpa,playframework,one-to-many,Hibernate,Jpa,Playframework,One To Many,嗨 我有这样的模型: public class Person extends Model { ... @OneToMany(orphanRemoval = true, mappedBy = "person") @Cascade({ CascadeType.ALL }) public List<Contact> infos = new ArrayList<Contact>(); } public class Contact extends Mode
public class Person extends Model {
...
@OneToMany(orphanRemoval = true, mappedBy = "person")
@Cascade({ CascadeType.ALL })
public List<Contact> infos = new ArrayList<Contact>();
}
public class Contact extends Model {
...
@ManyToOne(optional = false)
public Person person;
}
public static void savePerson(Person person) {
person.save();
renderJSON(person);
}
我的问题是,当我试图用savePerson()保存一个人时,我出现了以下错误(仅当我的个人列表不为空时):
我不理解错误消息,因为如果列表以前是空的或不是空的,它就会出现。我今天遇到了一个非常类似的问题 问题是,您不能只将一个新集合分配给“infos”列表,因为这样Hibernate就会感到困惑。当您将Person用作控制器中的参数时,Play会自动执行此操作。要解决这个问题,您需要修改“infos”的getter和setter,这样它就不会实例化新的集合/列表 这是迄今为止我发现的最简单的解决方案:
public class Person extends Model {
// ...
public List<Contact> getInfos() {
if (infos == null) infos = new ArrayList<Contact>();
return infos;
}
public void setInfos(List<Contact> newInfos) {
// Set new List while keeping the same reference
getInfos().clear();
if (newInfos != null) {
this.infos.addAll(newInfos);
}
}
// ...
}
不,因为我无法应用本文中的解决方案
public class Person extends Model {
// ...
public List<Contact> getInfos() {
if (infos == null) infos = new ArrayList<Contact>();
return infos;
}
public void setInfos(List<Contact> newInfos) {
// Set new List while keeping the same reference
getInfos().clear();
if (newInfos != null) {
this.infos.addAll(newInfos);
}
}
// ...
}
public static void savePerson(Person person) {
person.merge();
person.save();
renderJSON(person);
}