2012-07-19 61 views
0

我只是有一个小的查询是否刷新涉及自动持续所有以前的实体关系。这里是我的意思是:刷新自动调用persist

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

为什么EntityManager的自动坚持我的shFood实体以及美食实体(shFood有一个级联cuisineSelection坚持),即使没有指定我坚持我的shFood?

谢谢一些澄清!

回答

1

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

什么happenening在你的情况:

  1. 的地方,你表现出你获得参考管实体实例shFood代码之前。此实例将保持管理状态,直到它被分离。
  2. shFood.setCuisines(cuisineSelection)在持久化上下文中进行更改
  3. entityManager.flush()强制实体管理器将对持久化上下文中的实体所做的更改刷新到数据库。对托管实体所做的所有更改都会刷新。
+0

非常感谢你Mikko。我现在终于明白管理实体真正需要的真正含义。 – 2012-07-19 05:38:43