CascadeType.REFRESH
实际上是做什么的?
它的定义是:
当我们刷新一个实体时,此字段中保存的所有实体也会被刷新
但这在实践中意味着什么?请给我一个简单的例子。
单独的CascadeType描述有点令人困惑,但从一般情况可以轻松解决。
对于任何CascadeType
值,这意味着如果在使用EntityManager
接口调用操作X
时,该实例引用了其他实体实例,并且该关联定义了CascadeType.X
,则EntityManager
操作也将应用于该关联实体。
因此,EntityManager.refresh()
被定义为:
从数据库中刷新实例的状态,覆盖对实体所做的更改(如果有)。
因此,如果实体A引用实体B,并且该引用使用@CascadeType.REFRESH
注释,并且调用EntityManager.refresh(A)
,则EntityManager.refresh(B)
也会被隐式调用。
通过刷新检索: 使用refresh方法可以从数据库中重新加载受管对象: 内存中的受管对象内容被丢弃(包括更改,如果有的话),并由从数据库检索到的数据替换。这可能有用,以确保应用程序处理最新版本的实体对象,以防它在检索后由另一个EntityManager进行了更改。