在同一个表上Hibernate两个外键

时间:2015-04-29 13:41:50

标签: java spring hibernate jpa spring-data

我会在学校上建立一个具有ManyToOne关系的教师实体。这是另一个用例,教师可以加入现有的学校,这意味着学校可以有很多老师,但是需要有一个所有者,特定学校的创建者或管理员。

@Entity
public class School extends BaseEntity {

  @OneToMany(cascade = CascadeType.ALL, mappedBy = "school")
  private Set<Teacher> teachers;

学校实体

  @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
  @JoinColumn(name = "owner_teacher_id")
  private Teacher owner;

这很有效。现在,将所有者列添加到学校实体的正确方法是什么。所有者将是创建该学校的老师的id。它只在学校创建期间分配一次。

因此,在添加新教师时,我选择通过为其指定名称来创建新学校。创建学校后,我会将这个相同的教师持久ID作为该创建学校的所有者。

在School实体上添加额外的OneToOne似乎首先起作用,但现在不可能打破这两个表之间的FK关系。

已添加到学校

Teacher savedTeacher = teacherRepository.save(teacher);
School savedSchool = schoolService.saveSchool(school);

savedTeacher.setSchool(savedSchool);

if (schoolForm.isNewSchool())
  savedSchool.setOwner(savedTeacher);

为了坚持下去,我会做这样的事情,它适用于当前的关系,但我认为这是错误的,是否有更简单的方法来设置记录的创建者?

$viewData = array(
               'data' => $data,
               'images' => $images,
               'someOther' => $someOtherData
          );

$this->load->view('includes/template', $viewData);

0 个答案:

没有答案