【问题标题】:hibernate - saving entity with an entity in it (that already exists in the db)hibernate - 保存实体,其中包含一个实体(已存在于数据库中)
【发布时间】:2012-05-30 14:36:40
【问题描述】:

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

我有 2 个实体:

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

学校也是一个实体

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

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

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

谢谢

【问题讨论】:

    标签: java hibernate entity


    【解决方案1】:

    @ManyToOne(cascade=ALL) 映射它。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        假设关联已经设置:

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

        entity.find (Student.class, student_id)

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

        【讨论】:

          猜你喜欢
          • 2014-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          • 1970-01-01
          • 2012-08-15
          • 2019-11-05
          • 2015-01-30
          相关资源
          最近更新 更多