返回顶部
首页 > 资讯 > 精选 >Hibernate中merge()方法的作用是什么
  • 134
分享到

Hibernate中merge()方法的作用是什么

2023-06-17 21:06:03 134人浏览 薄情痞子
摘要

Hibernate中merge()方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体的实现过程如下:背景:◆Account 和 Group 两个对象,设置了双向

Hibernate中merge()方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

具体的实现过程如下:

背景:
◆Account 和 Group 两个对象,设置了双向的many-to-many关系,lazy=true

◆不使用open session in view 模式

◆不使用hibernate二级缓

◆考虑WEB应用场景,设置account和group关联时,只需要group和account的id就够了。

数据库中存在两个group: 1.administrators, 2.engineers而po对象中,group信息为:1.invalid, 2.any one

代码A:

Account account = (Account) getHibernateTemplate().merge(po);     Long id = account.getId();     System.out.println("\tGet obj after added in dao start ...");     Account readAccount = (Account) getHibernateTemplate().get(         Account.class, id);     System.out.println("\tGet obj after added in dao end ...");     System.out.println("\tIs po==readAccount ? " + (po == readAccount));     System.out.println("\tShow detai of po: " + po.toDetailString());     System.out.println("\tShow detai of readAccount: " + readAccount.toDetailString());

其中,为po设置了两个group 输出结果:

Hibernate: select ... from SYS_GROUPS where ID=?     Hibernate: select ... from SYS_GROUPS where ID=?         Get obj after added in dao start ...         Get obj after added in dao end ...         Is po==readAccount ? false        Show detai of po: Account[0.account_22, groups[2.any one 1.invalid ]]         Show detai of readAccount: Account[22.account_22, groups[2.engineers 1.administrators ]]     Hibernate: insert into SYS_ACCOUNTS (...) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)

代码B:

Long id = (Long) getHibernateTemplate().save(po);     System.out.println("\tGet obj after added in dao start ...");     Group group = (Group)getHibernateTemplate().get(Group.class,new Long(1));     System.out.println("\tGroup detai:" + group.toString());     Account readAccount = (Account) getHibernateTemplate().get(         Account.class, id);     System.out.println("\tGet obj after added in dao end ...");     System.out.println("\tIs po==readAccount ? " + (po == readAccount));     System.out.println("\tShow detai of po: " + po.toDetailString());     System.out.println("\tShow detai of readAccount: "        + readAccount.toDetailString());         getHibernateTemplate().merge(readAccount);     Account readAgain = (Account) getHibernateTemplate().get(Account.class,         id);     System.out.println("\tIs po==readAgain ? " + (readAgain == po));     System.out.println("\tIs readAgain== readAccount? "        + (readAgain == readAccount));     System.out.println("\tShow detai again: " + readAgain.toDetailString());

输出结果:

    Get obj after added in dao start ...     Hibernate: select ... from SYS_GROUPS where ID=?         Group detai:Group 1. administrators         Get obj after added in dao end ...         Is po==readAccount ? true        Show detai of po: Account[27.account_27, groups[1.invalid 2.any one ]]         Show detai of readAccount: Account[27.account_27, groups[1.invalid 2.any one ]]     Hibernate: select ... from SYS_GROUPS where ID=?         Is po==readAgain ? true        Is readAgain== readAccount? true        Show detai again: Account[27.account_27, groups[1.administrators 2.engineers ]]     Hibernate: insert into SYS_ACCOUNTS (...) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)

结论:

Hibernate merge()方法会导致执行查询group对象的select语句,在调用merge()命令时立即执行(条件:目标group对象没有被缓存

无论Hibernate merge()或save()方法,insert语句都在***执行,并非在调用相应命令时立即执行

直接调用merge()方法时,会返回一个新的instance,原po保持不变

save()之后,po中的group对象并没有被关联到session,因此查询group(id=1)会触发select语句

save()之后,po对象被关联到session,再次查询,不会触发select语句,并且不会检查group对象是否被关联到session

save()之后再调用merge,返回的是同一个instance,但其关联group对象会被更新

如果在add一个对象之后,如果存在关联对象,并且需要再同一个hibernate session中进行回显,则建议使用Hibernate merge()方法。

看完上述内容,你们掌握Hibernate中merge()方法的作用是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Hibernate中merge()方法的作用是什么

本文链接: https://lsjlt.com/news/293263.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hibernate中merge()方法的作用是什么
    Hibernate中merge()方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体的实现过程如下:背景:◆Account 和 Group 两个对象,设置了双向...
    99+
    2023-06-17
  • Hibernate中Session的作用是什么
    这篇文章给大家介绍Hibernate中Session的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Hibernate中的Session是一级缓存,可以理解为进程级(是线程吧)的缓存,在进程(是线程吧)运行期...
    99+
    2023-05-30
    hibernate session
  • Hibernate的作用是什么
    这篇文章主要讲解了“Hibernate的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate的作用是什么”吧!一.Hibernate定义Hibernate是一种Java...
    99+
    2023-06-17
  • Hibernate中各个包的作用是什么
    这篇文章主要讲解了“Hibernate中各个包的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate中各个包的作用是什么”吧!下载Hibernate,例如2.0.3稳定...
    99+
    2023-06-03
  • sql merge函数的作用是什么
    SQL中并没有merge函数,但是有一个MERGE语句,用来将INSERT、UPDATE和DELETE操作结合在一起,根据指定的条件...
    99+
    2024-04-09
    sql
  • git merge最简洁的使用方法是什么
    git merge最简洁的使用方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Git中使用最频繁的命令之一就是git merge,git-merge命令是用于将两个或...
    99+
    2023-06-28
  • sql merge函数的用法是什么
    SQL中并没有内置的MERGE函数,但是可以使用MERGE语句来实现类似的功能。MERGE语句用于根据指定的条件判断数据是否存在,如...
    99+
    2024-04-09
    sql
  • mysql merge语句的用法是什么
    MySQL中没有MERGE语句,但是可以通过其他方式实现类似的功能。 在MySQL中,可以使用INSERT INTO … ON DU...
    99+
    2024-04-09
    mysql
  • spring整合hibernate的方法是什么
    Spring整合Hibernate的方法有以下几种:1. 使用Spring的HibernateTemplate:Spring提供了H...
    99+
    2023-08-12
    spring hibernate
  • git中的merge指的是什么
    这篇文章给大家介绍git中的merge指的是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在git中,merge的意思为“合并”,该命令是用于将两个或两个以上的开发历史合并在一起的操作;merge命令可用于git-...
    99+
    2023-06-22
  • JavaScript中方法的作用是什么
    这期内容当中小编将会给大家带来有关JavaScript中方法的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.什么是方法定义并调用一个常规函数:functio...
    99+
    2024-04-02
  • Hibernate检查id字段的方法是什么
    这篇文章主要讲解了“Hibernate检查id字段的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate检查id字段的方法是什么”吧!当你想要创建一个将其它域对象保存在...
    99+
    2023-06-17
  • Java 8 中 Map 骚操作之 merge() 的使用方法
    Java 8 最大的特性无异于更多地面向函数,比如引入了lambda等,可以更好地进行函数式编程。前段时间无意间发现了map.merge()方法,感觉还是很好用的,此文简单做一些相关...
    99+
    2024-04-02
  • Mybatis中Size()方法的作用是什么
    这篇文章将为大家详细讲解有关Mybatis中Size()方法的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言MyBatis 是一个开源的轻量级...
    99+
    2024-04-02
  • javascript中save()方法的作用是什么
    本篇内容介绍了“javascript中save()方法的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • jQery 中load()方法的作用是什么
    jQery 中load()方法的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 一.l...
    99+
    2024-04-02
  • vue.js中created方法的作用是什么
    vue.js中created方法的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实例生命周期每个 Vue 实例在被创建之前都要经...
    99+
    2024-04-02
  • Vue.js中$watch方法的作用是什么
    Vue.js中$watch方法的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。// 键路径 vm.$watch('...
    99+
    2024-04-02
  • JavaScript 中方法链的作用是什么
    本篇文章给大家分享的是有关JavaScript 中方法链的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法链的例子在处理字符串时有...
    99+
    2024-04-02
  • java中split()方法的作用是什么
    本篇文章为大家展示了java中split()方法的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2....
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作