2

目标是在删除其所有者时删除所有依赖项。我有以下课程:

@Entity
class Dependent {    
    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, optional = false)
    @Column(name = "OWNER")
    private Owner _owner;
}

@Entity
class Owner {
...
}

在当前实现中,Dependent 在其所有者被删除后仍然存在。

Owner 没有任何指向 Dependent 的链接,无法更改,因此我无法使用 @Dependent 注释或 cascade=DELETE。

JPA 是否支持这种“反向依赖”?另一个问题是在字段 _owner 被删除时 optional="false" 保证什么?

4

2 回答 2

0

您有两个选择:您必须将 bag/set/list 添加到Owner带有cascade-delete. 你可以让这个包变得懒惰并且永远不要访问它,所以在你删除之前它不会对性能产生影响。

您的另一个选择是在删除Dependent所有者时使用查询删除实例。由于 JPA 不会对实例进行自动垃圾收集,因此无论如何您都必须手动启动删除,因此只需确保每个都使用单个函数删除所有者,然后添加调用以删除那里的子节点。

于 2009-12-28T15:00:41.910 回答
0

解决此问题的一种方法是使用与所有者共享相同表的子类,并添加指向依赖项的集合。我不同意 Aaron Digulla 关于 'optional=false' 的观点,该语句仅表明关联是可选的,并且因为您没有双向关联,所以 Dependent 始终处理映射。

于 2009-12-31T02:25:16.283 回答