CascadeType.REFRESH实际上做了什么?

Kim*_*m L 76 java jpa

什么是CascadeType.REFRESH真正做?

它的定义是

刷新实体时,此字段中保留的所有实体也会刷新

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

ska*_*man 112

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

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

所以EntityManager.refresh()定义为:

从数据库刷新实例的状态,覆盖对实体所做的更改(如果有).

因此,如果实体A具有对实体B的引用,并且该引用被注释@CascadeType.REFRESH,并且EntityManager.refresh(A)被调用,则EntityManager.refresh(B)也会隐式调用.

  • 回答了我自己的问题.答案是否定的.您必须在对象上调用save才能使其成为持久对象. (3认同)

小智 6

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

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

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