CascadeType.REFRESH实际上做了什么?

时间:2009-09-10 06:34:06

标签: java jpa

CascadeType.REFRESH实际上做了什么?

它的定义是

  

当我们刷新实体时,此字段中保留的所有实体也会刷新

但这在实践中意味着什么?有人可以给我一个简单的例子吗?

2 个答案:

答案 0 :(得分:110)

单独的CascadeType描述可能有点令人困惑,但有一种简单的方法可以从一般情况中找出它。

对于任何CascadeType值,这意味着如果使用X接口在实例上调用操作EntityManager,并且该实例具有对其他实体实例的引用,那么关联已定义CascadeType.X,然后EntityManager操作也将应用于该关联实体。

所以EntityManager.refresh()定义为:

  

从中刷新实例的状态   数据库,覆盖所做的更改   到实体,如果有的话。

因此,如果实体A具有对实体B的引用,并且该引用使用@CascadeType.REFRESH进行注释,并且EntityManager.refresh(A)被调用,那么EntityManager.refresh(B)也会被隐式调用。

答案 1 :(得分:6)

按刷新检索: 可以使用refresh方法从数据库重新加载托管对象:

内存中托管对象的内容将被丢弃(包括更改,如果有),并替换为从数据库中检索的数据。这可能有助于确保应用程序处理实体对象的最新版本,以防它被检索后可能已被另一个EntityManager更改。

来源:http://www.objectdb.com/java/jpa/persistence/retrieve