Java CascadeType.REFRESH实际上做什么?

Java CascadeType.REFRESH实际上做什么?,java,jpa,Java,Jpa,CascadeType.REFRESH实际上做什么 它的定义是 当我们刷新一个实体时,该字段中的所有实体也会刷新 但这在实践中意味着什么?有人能给我一个简单的例子吗?单个级联类型的描述可能有点混乱,但有一种简单的方法可以从一般情况中找出它 对于任何CascadeType值,这意味着如果使用EntityManager接口对实例调用操作X,并且该实例引用了其他实体实例,并且该关联已定义CascadeType.X,然后EntityManager操作也将应用于该关联实体 因此EntityManager.

CascadeType.REFRESH实际上做什么

它的定义是

当我们刷新一个实体时,该字段中的所有实体也会刷新


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

单个级联类型的描述可能有点混乱,但有一种简单的方法可以从一般情况中找出它

对于任何
CascadeType
值,这意味着如果使用
EntityManager
接口对实例调用操作
X
,并且该实例引用了其他实体实例,并且该关联已定义
CascadeType.X
,然后
EntityManager
操作也将应用于该关联实体

因此
EntityManager.refresh()
定义为:

从刷新实例的状态 数据库,覆盖所做的更改 向实体(如有)发送

因此,如果实体A引用了实体B,并且该引用用
@CascadeType.REFRESH
注释,并且调用了
EntityManager.REFRESH(A)
,那么
EntityManager.REFRESH(B)
也被隐式调用。

通过刷新进行检索: 可以使用刷新方法从数据库重新加载托管对象:

内存中托管对象的内容将被丢弃(包括更改,如果有),并由从数据库检索的数据替换。这可能有助于确保应用程序处理实体对象的最新版本,以防在检索到实体对象后另一个EntityManager对其进行了更改


来源:

我知道这是一篇老文章,但使用上面的A和B示例,如果B的实例当前已分离,CascadeType.PERSIST是否会导致B变得持久?我正在使用Hibernate的JPA实现。回答了我自己的问题。答案是否。您必须对对象调用save才能使其成为持久对象。如果合并处于持久状态的对象,会发生什么情况?