REFRESH 和 MERGE 在数据库方面是啥意思?

Posted

技术标签:

【中文标题】REFRESH 和 MERGE 在数据库方面是啥意思?【英文标题】:What do REFRESH and MERGE mean in terms of databases?REFRESH 和 MERGE 在数据库方面是什么意思? 【发布时间】:2010-10-24 14:35:10 【问题描述】:

我很好奇,需要快速找到这个答案。 Google 帮不了多少。

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

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

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

但我无法理解其他两人的成就。帮忙?

【问题讨论】:

【参考方案1】:

JPA Annotation Meaning for Many to Many relationships:

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

我自己是这样看的(更具可读性):

MERGE - 对于现有对象,将表中的现有数据与我的对象中的数据合并。 (同步到数据库) PERSIST - 从数据库中的对象创建新记录。 REFRESH - 是刷新对象中的数据。也许需要同步的数据库发生了变化。 (从数据库同步) REMOVE - 嗯,删除。

【讨论】:

注释的 Javadoc 并没有为我清除任何问题。感谢您的回答!【参考方案2】:

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

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

Link to one instance of the relevant docs

【讨论】:

什么是默认值(如果我们没有设置任何 CascadeType),什么是最明智/最常用的设置? @Rosdi Kasim:CascadeType 默认为空数组。 @chaos 所以 refresh 更新子级以在更新/刷新父级时匹配数据库中的内容。合并本质上将覆盖数据库中子实体中更新的字段,以反映子实体与父实体。那么如果两者都使用,会发生什么?我想我误解了这一点。

以上是关于REFRESH 和 MERGE 在数据库方面是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

the hash for the file is not present in the specified catalog file,是啥意

[RxJS] Reactive Programming - New requests from refresh clicks -- merge()

merge是啥意思

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表啥意

merge是啥意思用法都有哪些

AbstractApplicationContext(Spring)下refresh()方法的用途是啥?为啥使用 refresh() 后 bean 单例范围丢失?