【发布时间】:2022-01-12 00:59:04
【问题描述】:
我的Employees 需要有一个角色,以后可以使用其他属性进行扩展。因此,我想将它们作为单独的实体。
在Employee 类中,我引用了这样一个角色:
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "role_id", referencedColumnName = "id", nullable = false)
private EmployeeRole role;
而EmployeeRole 类只有一个数字id 属性和一个描述为String。
目标
每当我创建Employee 类型的实体时,我只想指定一个角色的description,而不是它的id。如果具有这种description 的角色已经存在,则其id 将用作Employee 关系上的role_id 外键。
否则,将创建一个新角色。
当前行为
为每个Employee 创建新的EmployeeRole。如果我将description 设置为唯一:
@Column(unique = true)
private String description;
如果具有指定描述的角色已存在,则不会创建Employee。
解决方案?
一种可能的解决方案是检查具有此描述的EmployeeRole 是否已存在,如果不存在则创建它,并在这两种情况下利用其id 将新的Employee 映射到它。
老实说,我不知道如何在类声明中做到这一点。任何建议表示赞赏。
【问题讨论】:
-
如果你使用
@OneToOne,每个Employee需要有一个不同的EmployeeRole(读取id)参考:manytoone-vs-onetoone
标签: java jpa spring-data-jpa