刷新自动呼叫持续

时间:2012-07-19 04:20:32

标签: ejb ejb-3.0 ejb-3.1

我只是对flush是否涉及自动保持所有先前的实体关系有一个小问题。这就是我的意思:

shFood.setCuisines(cuisineSelection);
entityManager.flush(); 

为什么entityManager会自动保留我的shFood实体以及美食(shFood有一个级联持有cuisineSelection)实体,即使没有我为我的shFood指定持久性?

希望得到一些澄清!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的shFood不是新的实体实例 - 而是已经是托管实体。没有必要为已经管理的实体调用persist来管理它们。此实体保持管理状态,直到实体托管关闭或实体与持久性上下文分离,例如通过detachclear

你的情况发生了什么:

  1. 在您展示的代码之前的某个地方获取对托管实体实例shFood的引用。此实例将保持管理状态,直到它被分离。
  2. shFood.setCuisines(cuisineSelection)在持久性上下文中进行更改
  3. entityManager.flush()强制实体管理器将对持久化上下文中的实体所做的更改刷新到数据库。对管理实体所做的所有更改都会刷新。