5

我正在尝试通过观察所有更改然后立即持久化有问题的对象来创建一个使对象模型与数据库保持同步的应用程序。模型中的许多对象在大型列表或树中都有子对象。

当我从数据库加载一个对象时,我依靠一种单向级联关系来检索它的所有子对象并将它们包含在应用程序中。

但是,可以更改需要持久性的父对象中的字段,并且我可以确定没有任何子对象受到影响。所以我想持久化父级,而不用所有级联子级持久化访问数据库。

例如

@Entity
public class Parent {

    @OneToMany(cascade=CascadeType.ALL)
    public List children;

}

持久化父对象时如何覆盖级联选项?或者我应该将其设置为 REFRESH 并确保我永远不需要级联持久化?

4

1 回答 1

4

从数据库中读取对象并将它们持久化依赖于两个不同的注释。

当您加载一个对象时,它还将获得任何急切 ( FetchType.EAGER) 关系的另一端,由关系上的 fetch 属性定义。

根据您的 JPA 提供程序,您可以选择覆盖此行为。EclipseLink,通过令人难以置信的有用QueryHint.BATCH,当然可以。

当您持久化、删除或刷新时,级联类型是相关的。

所以,失去级联,保持获取和问题解决。

我个人认为级联都是自找麻烦,但意见会有所不同。

一个体面的 JPA 提供者已经拥有一个相当复杂的(可配置的)缓存方案。也许您应该问为什么要重新发明那个特定的轮子?

纯粹是为了性能而异步更新的问题吗?还是另有原因?

于 2008-12-23T06:16:55.580 回答