【发布时间】:2015-04-11 14:30:26
【问题描述】:
我有一个 Person 对象。 Person 有一个同样是 Person 类型的 manager 属性。
@OneToOne(optional = true, cascade = { CascadeType.ALL })
private Person manager;
假设 John 是经理,Bob 是员工。当我试图删除 John 时,由于 Bob 成为孤儿(没有经理),它失败了。在我的用例中应该允许这样做。但是将这种关系标记为“可选”并没有帮助。而且Cascade在这里似乎没有任何意义。
我认为 JPA 可以做到这一点。有什么帮助吗?
@Entity
public class Person {
@Id
private String id;
private String name;
private Integer age;
private Address address;
@JoinColumn(name = "manager_id", nullable = true, insertable = true, updatable = true)
@OneToOne(optional = true, cascade = { CascadeType.ALL })
private Person manager;
@OneToMany(mappedBy = "manager", cascade = { CascadeType.ALL })
public Collection<Person> reportees;
【问题讨论】:
-
数据库中的
manager_id列是否配置为非空? -
Person中的“id”字段应该是manager id,否则没有明确的字段。
-
使用这些映射,
manager_id必须存在于数据库中。它保存作为“当前”人员的经理的人员的 ID。 -
如何将其标记为可空(我认为可选会这样做)?我实际上是在使用 JPA bean 来创建数据库架构,而不是其他方式。
-
optional应该这样做,如果它在数据库中实际上不为空,我只是在徘徊。此外,完整的异常以及导致异常的代码也会有所帮助。
标签: java jpa relationship orphan