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