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