考虑一个如下所示的类:
class Person {
@Column(name = "id")
Integer id;
@Column(name = "name")
String name;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "owner")
List <Car> cars;
}
class Car {
@Column(name = "name")
String name;
@Column(name = "plate")
String plate;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id", nullable=false)
Person owner;
}
现在,当我们保存一个 person 对象时:
Transaction tx = session.beginTransaction();
session.save(person);
for (Car c : person.getCars()) {
session.save(c);
}
tx.commit();
难道不能只将 java 对象交给 Hibernate 并让它保存所有内容吗?
最佳答案
谢谢阿维德。这正是我所需要的。 为了供将来引用,这是我使用的代码...
class Person {
@Column(name = "id")
Integer id;
@Column(name = "name")
String name;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "owner", orphanRemoval=true)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
List <Car> cars;
}
class Car {
@Column(name = "name")
String name;
@Column(name = "plate")
String plate;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id", nullable=false)
Person owner;
}
唯一真正的区别是,您必须确保在保存父对象之前完成对链接对象的任何更新。
即这是行不通的。
Transaction tx = session.beginTransaction();
session.save(person);
for (Car c : person.getCars()) {
c.setName(c.getName() + " Update test");
}
tx.commit();
但这会
Transaction tx = session.beginTransaction();
for (Car c : person.getCars()) {
c.setName(c.getName() + " Update test");
}
session.save(person);
tx.commit();
关于java - 为什么需要用 Hibernate 单独保存所有 OneToMany 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39551609/