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


93

我很好奇,需要快速找到答案。Google不会有太大帮助。

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

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

我知道前两个是什么意思:当我持久化具有B的对象A时,也持久化B,并且在删除A时也删除B。

但是我无法理解其他两个人的成就。救命?

Answers:


79

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

MERGE表示某种复杂的事物,近似于“保存”,但更像是“将该分离的实体推回托管状态并保存其状态更改”;级联意味着所有关联的实体都以相同的方式被推回,并且您从中获得的托管实体句柄.merge()具有与之关联的所有托管实体。

链接到相关文档的一个实例


默认设置是什么(如果我们没有设置任何CascadeType),最明智/最常见的设置是什么?
Rosdi Kasim

@Rosdi Kasim:CascadeType默认为空数组。
user1438038

@chaos这样刷新会更新子项以匹配更新/刷新父项时数据库中的内容。合并实际上将覆盖数据库中子级中的更新字段,以将子级实体反映给父级。因此,如果同时使用两者,会发生什么?我想我误会了这一点。
乔丹·麦基

87

多对多关系的JPA注释含义

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

我本人以这种方式看到它们(更具可读性):

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

1
注释的Javadoc并没有为我清除任何内容。感谢你的回答!
2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.