使用事务dao保存瞬态实体

时间:2013-09-17 10:12:56

标签: java hibernate dao

我正在使用Hibernate保存实体的瞬态实例:

Student e = new Student();
e.setName("Clio");

School s = new School();
s.setName("Archimede");

e.setSchool(s);

myDao.save(e);

我是事务性的道:

@Transactional
@Repository
public class MyDao {
   // Other code

为什么在这种情况下只有学生插入表中而不是学校?

2 个答案:

答案 0 :(得分:1)

因为你没有把学校传给save(),学校目前与学生没有任何关系。

编辑:既然你已经添加了学生和学校之间的关系,那么你可能没有正确地映射他们之间的参考。您可能会错过学生课程中学校参考的级联选项(@ManyToOne(cascade=CascadeType.PERSIST)@ManyToOne(cascade=CascadeType.ALL))。

答案 1 :(得分:0)

既然你没有陈述某事。否则,我想你的学校实体拥有学校和学生之间的关系。因此,您必须将学生添加到学校实体中的持久集(例如school.getStudents()。add(student))并在之后保存学校实体。

有关关系所有权的更多信息,请查看here。当然,你也可以决定让学生拥有这段关系,虽然在这种情况下对我来说没什么意义,但是你提供的代码会按预期工作。

您还需要添加正确的级联,如上一个答案中所述