1

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

我有 2 个实体:

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

学校也是一个实体

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

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

问题是当我尝试坚持学生时,它给了我一个错误:“分离的实体传递给坚持”,我如何告诉休眠,学生班级中的学校已经存在于数据库中,并且应该使用它反而?

谢谢

4

3 回答 3

3

映射它@ManyToOne(cascade=ALL)

但是,“同名”是不够的,您应该有相同的 ID。为此,您需要确保您的School对象是从数据库中获取的,然后再将其设置为 Student

于 2012-05-30T14:39:32.707 回答
0

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

于 2012-05-30T14:38:43.247 回答
0

假设关联已经设置:

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

entity.find (Student.class, student_id)

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

于 2012-05-30T14:48:35.497 回答