2009-09-10 122 views
61

CascadeType.REFRESH实际上做了什么?CascadeType.REFRESH实际上做了什么?

的定义,因为这是

当我们刷新一个实体在这一领域举行的所有实体刷新太

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

回答

95

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

对于任何CascadeType的值,它意味着如果操作X上调用使用EntityManager接口的实例,该实例具有与其他实体实例的引用,而关联已经CascadeType.X定义,则EntityManager操作也将适用于该关联实体。

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

从 刷新实例的状态数据库,覆盖由 到实体的变化,如果有的话。

因此,如果实体A具有到实体B的引用,并且参考被注解为@CascadeType.REFRESH,并EntityManager.refresh(A)被调用,那么EntityManager.refresh(B)被隐式也调用。

+0

我知道这是旧的文章,但使用上述A和B的例子,如果B的实例当前分离,将一个CascadeType.PERSIST事业B到成为持续性?我正在使用Hibernate的JPA实现。 – Andy 2012-10-08 14:08:56

+3

回答了我自己的问题。答案是否定的。您必须调用该对象上的保存以使其变为持久性。 – Andy 2012-10-08 14:25:55

3

检索由刷新: 管理对象可以从数据库通过使用所述刷新方法被重新加载:

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

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

相关问题