【问题标题】: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。

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

【问题讨论】:

    标签: java jpa persistence


    【解决方案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 更新子级以在更新/刷新父级时匹配数据库中的内容。合并本质上将覆盖数据库中子实体中更新的字段,以反映子实体与父实体。那么如果两者都使用,会发生什么?我想我误解了这一点。
    猜你喜欢
    • 2011-12-14
    • 2022-12-08
    • 2011-01-08
    • 2016-10-17
    • 1970-01-01
    • 2017-03-29
    • 2020-06-26
    • 2020-08-30
    • 2010-10-29
    相关资源
    最近更新 更多