栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在JPA和Hibernate中,persist()和merge()之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在JPA和Hibernate中,persist()和merge()之间有什么区别?

JPA规范包含对这些操作的语义的非常精确的描述,比在javadoc中更好:

应用于实体X 的 persist 操作的语义如下:

  • 如果X是新实体,则它将成为托管实体。实体X将在事务提交时或之前或作为刷新操作的结果输入数据库中。

*如果X是一个预先存在的管理实体,则persist操作将忽略它。但是,如果从X到这些其他实体的关系用

cascade=PERSIST
cascade=ALL

注释元素值进行注释或用等效的XML描述符元素指定,则持久化操作将级联到X引用的实体 。

  • 如果X是已删除的实体,则它将被管理。

  • 如果X是一个分离的对象,则

    EntityExistsException
    当persist操作被调用时,或者可能抛出
    EntityExistsException
    或另一个
    PersistenceException
    可在冲洗被抛出或提交时间。

  • 对于由X的关系引用的所有实体Y,如果与Y的关系已用级联元素值

    cascade=PERSIST
    或注释
    cascade=ALL
    ,则将持久操作应用于Y。


应用于实体X 的 合并 操作的语义如下:

  • 如果X是一个分离的实体,则将X的状态复制到具有相同标识的预先存在的管理实体实例X’上,或者创建X的新的管理副本X’。

  • 如果X是新的实体实例,则创建新的管理实体实例X’,并将X的状态复制到新的管理实体实例X’中。

  • 如果X是已删除的实体实例,

    IllegalArgumentException
    则合并操作将抛出an (否则事务提交将失败)。

  • 如果X是受管实体,则合并操作将忽略它,但是,如果已用级联元素值

    cascade=MERGE

    cascade=ALL
    注释对这些关系进行了注释,则合并操作将级联到X中的关系所引用的实体。

  • 对于由来自具有级联元素值

    cascade=MERGE
    或的X的关系引用的所有实体Y
    cascade=ALL
    ,将Y递归合并为Y’。对于X引用的所有此类Y,将X’设置为引用Y’。(请注意,如果管理X,则X与X’是同一对象。)

*如果X是合并到X’的实体,并引用了另一个实体Y(其中未指定

cascade=MERGE
或未
cascade=ALL
指定),则从X’导航相同的关联会生成对具有与Y相同的持久标识的托管对象Y’的引用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号