hibernate - 保存实体,其中包含一个实体(已存在于db中)

时间:2012-05-30 14:36:40

标签: java hibernate entity

为简单起见,这是我的简化模型:

我有两个实体:

@entity
public class Student {
int id;
School school
...
}

并且学校也是一个实体

@entity
public class School {
int id;
...
}
我试图从文本文件中提取大量数据。 有些学生有相同的学校实例, 我不希望我的数据库中的多个学校同名, 所以我的目标是将每个学生保存在学生数据库中,同时确保同一所学校的2名不同学生不会在我的学校数据库中创建2个条目。

问题是当我试图坚持学生时,它给了我一个错误: “分离的实体传递给持久化”,我怎么告诉hibernate,学生类中的学校已经存在于数据库中,而它应该使用它呢?

感谢

3 个答案:

答案 0 :(得分:3)

使用@ManyToOne(cascade=ALL)映射。

“同名”是不够的,你应该有相同的ID。要使其正常工作,您需要确保在将School对象设置为学生之前从数据库中取出{{1}}对象

答案 1 :(得分:0)

会话中有一个名为merge()的方法。使用它而不是saveOrUpdate();

答案 2 :(得分:0)

假设已经设置了关联:

确保您正在使用持久化的Student实体。搜索学生实体,并设置学校 - >学生从搜索返回的学生实体。

entity.find(Student.class,student_id)

否则,在执行上述操作之前,请确保注释关联。