REFRESH和MERGE在数据库方面意味着什么?

时间:2009-05-07 19:31:31

标签: java jpa persistence

我很好奇,需要快速找到这个答案。谷歌不会帮助太多。

Java Persistence API具有这些属性,可以告诉框架对关联实体进行级联操作:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

我知道前两个是什么意思:当我持有有B的对象A时,也坚持B,当我删除A时,也删除B.

但我无法理解其他两个人所取得的成就。帮助

2 个答案:

答案 0 :(得分:78)

JPA Annotation Meaning for Many to Many relationships

  • ALL - 在源实体上执行的所有可能的级联操作都级联到关联的目标。
  • MERGE - 如果合并源实体,则合并将级联到关联的目标。
  • PERSIST - 如果源实体被持久化,则持久化将被级联到关联的目标。
  • REFRESH - 如果刷新源实体,则刷新将级联到关联的目标。
  • REMOVE - 如果删除了源实体,则也会删除该关联的目标。

我自己这样看待他们(更具可读性):

  • MERGE - 对于现有对象,将表中的现有数据与对象中的数据合并。 (同步到数据库)
  • PERSIST - 从数据库中的对象创建新记录。
  • REFRESH - 用于刷新对象中的数据。也许数据库需要进行同步更改。 (从数据库同步)
  • 删除 - 好吧,删除。

答案 1 :(得分:71)

REFRESH表示“将任何状态更改从数据库拉到我的表示中”。级联这很简单;这意味着所有关联的实体都会刷新。

MERGE意味着复杂的东西近似“保存”,但更像是“将这个分离的实体推回到托管状态并保存其状态变化”;级联意味着所有关联实体以相同方式被推回,而您从.merge()返回的托管实体句柄具有与之关联的所有管理实体。

Link to one instance of the relevant docs