我会在学校上建立一个具有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);