Spring Data JPA:如何在插入期间在子实体上设置2个外键



我是Spring JPA的新手,在插入一行时,我在实体上设置外键时遇到了一些麻烦。

我有以下实体

@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String departmentName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "department_id")
List<Employee> employees;
}
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String employeeName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_id")
List<Role> roles;
@ManyToOne
@JoinColumn(name = "department_id", insertable = false, updatable = false)
private Department department;
}
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String roleName;
@ManyToOne
@JoinColumn(name = "employee_id", insertable = false, updatable = false)
private Employee employee;
@ManyToOne
@JoinColumn(name = "department_id", insertable = false, updatable = false)
private Department department;
}

这是部门存储库:

@Repository
public interface DepartmentRepository extends JpaRepository<Department, Integer> {
Department findById(long id);
}

使用这种方法,当我使用departmentRepository.save(department)保存Department对象时,employee表中的department_idrole表中的employee_id被正确设置。

但我也希望它在role表中设置department_id。如何才能做到这一点?目前,部门和角色的关系是间接的(即通过雇员),但是我是否必须在这两个实体之间创建直接关系?我不知道如何做到这一点。如有任何意见,我们将不胜感激。

编辑:

我想在这个实体关系图中建立关系模型

我看到你已经在使用

@OneToMany(cascade = CascadeType.ALL)

所以你知道每次更新Department with list Employee都可以做"许多"的东西。

所以雇员对角色(你的列表)做同样的事情,但神奇的自动保存/更新不起作用。

条件:

  • 在repo中保存操作
  • 员工名单
  • 员工角色列表(每个对象没有部门Id)

As I understand:

您有1-n到Employee的Department (Employee只能有1个Department)

员工可以有多个Role

正常逻辑:部门1-n员工1-n角色

但有些部门也有你想要的角色对象。

所以我的第一个建议是改变逻辑代码。

第二:解决问题的方法!

创建部门添加Role到Employee时,也请访问并添加department_id。(部门保存员工列表,当保存员工列表角色时也以相同的逻辑保存,只需确保添加它)

最新更新