CascadeType.REFRESH 实际上是做什么的?

CascadeType.REFRESH实际上是做什么的?

它的定义是

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

但是这在实践中意味着什么呢? 谁能给我举个简单的例子吗?

69508 次浏览

The individual CascadeType descriptions can be a bit confusing, but there's an easy way to figure it out from the general case.

For any of the CascadeType values, it means that if operation X is called on an instance using the EntityManager interface, and that instance has references to other entity instances, and that association has CascadeType.X defined, then the EntityManager operation will also be applied to that associated entity.

So EntityManager.refresh() is defined as :

Refresh the state of the instance from the database, overwriting changes made to the entity, if any.

So if entity A has a reference to entity B, and that reference is annotated with @CascadeType.REFRESH, and EntityManager.refresh(A) is called, then EntityManager.refresh(B) is implicitly called also.

Retrieval by Refresh: Managed objects can be reloaded from the database by using the refresh method:

The content of the managed object in memory is discarded (including changes, if any) and replaced by data that is retrieved from the database. This might be useful to ensure that the application deals with the most up to date version of an entity object, just in case it might have been changed by another EntityManager since it was retrieved.

Source: http://www.objectdb.com/java/jpa/persistence/retrieve