为简单起见,这是我的简化模型:
我有两个实体:
@entity
public class Student {
int id;
School school
...
}
并且学校也是一个实体
@entity
public class School {
int id;
...
}
我试图从文本文件中提取大量数据。
有些学生有相同的学校实例,
我不希望我的数据库中的多个学校同名,
所以我的目标是将每个学生保存在学生数据库中,同时确保同一所学校的2名不同学生不会在我的学校数据库中创建2个条目。
问题是当我试图坚持学生时,它给了我一个错误: “分离的实体传递给持久化”,我怎么告诉hibernate,学生类中的学校已经存在于数据库中,而它应该使用它呢?
感谢
答案 0 :(得分:3)
使用@ManyToOne(cascade=ALL)
映射。
“同名”是不够的,你应该有相同的ID。要使其正常工作,您需要确保在将School
对象设置为学生之前从数据库中取出{{1}}对象
答案 1 :(得分:0)
会话中有一个名为merge()的方法。使用它而不是saveOrUpdate();
答案 2 :(得分:0)
假设已经设置了关联:
确保您正在使用持久化的Student实体。搜索学生实体,并设置学校 - >学生从搜索返回的学生实体。
entity.find(Student.class,student_id)
否则,在执行上述操作之前,请确保注释关联。