CascadeType.REFRESH实际上做了什么?

CascadeType.REFRESH实际上做了什么?

它的定义是

当我们刷新一个实体时,所有在这个字段中保存的实体也会刷新

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

单独的CascadeType描述可能有点混乱,但是从一般情况下可以很容易地find它。

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

所以EntityManager.refresh()被定义为:

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

所以如果实体A有一个对实体B的引用,并且引用用@CascadeType.REFRESH注解,并且EntityManager.refresh(A)被调用,那么EntityManager.refresh(B)也被隐式调用。

通过刷新检索:可以使用刷新方法从数据库重新加载托pipe对象:

内存中被pipe理对象的内容被丢弃(包括更改,如果有的话),并由从数据库中检索的数据取代。 这可能有助于确保应用程序处理实体对象的最新版本,以防万一它被检索到后可能被另一个EntityManager更改。

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