CascadeType.REFRESH实际上做了什么?
问题描述:
CascadeType.REFRESH
实际上做了什么?CascadeType.REFRESH实际上做了什么?
的定义,因为这是
当我们刷新一个实体在这一领域举行的所有实体刷新太
,但是这是什么意思在实践中?有人能给我一个简单的例子吗?
答
单个CascadeType描述可能有点令人困惑,但有一个简单的方法可以从一般情况中找出它。
对于任何CascadeType
的值,它意味着如果操作X
上调用使用EntityManager
接口的实例,该实例具有与其他实体实例的引用,而关联已经CascadeType.X
定义,则EntityManager
操作也将适用于该关联实体。
所以EntityManager.refresh()
被定义为:
从 刷新实例的状态数据库,覆盖由 到实体的变化,如果有的话。
因此,如果实体A具有到实体B的引用,并且参考被注解为@CascadeType.REFRESH
,并EntityManager.refresh(A)
被调用,那么EntityManager.refresh(B)
被隐式也调用。
答
检索由刷新: 管理对象可以从数据库通过使用所述刷新方法被重新加载:
管理对象的存储器中的内容被丢弃(包括变化,如果有),并替换为数据即从数据库中检索。这可能有助于确保应用程序处理实体对象的最新版本,以防万一它被检索到后可能被另一个EntityManager更改。
我知道这是旧的文章,但使用上述A和B的例子,如果B的实例当前分离,将一个CascadeType.PERSIST事业B到成为持续性?我正在使用Hibernate的JPA实现。 – Andy 2012-10-08 14:08:56
回答了我自己的问题。答案是否定的。您必须调用该对象上的保存以使其变为持久性。 – Andy 2012-10-08 14:25:55