2 npf8888 npf8888 于 2014.09.30 16:28 提问

关于hibernate的session.saveOrUpdate()底层实现的问题

这个问题会有点模糊,因为我的目的是想知道 session的增删改查底层实现原理,所以我详细看了下(以saveOrUpdate()方法为主)saveOrUpdate的流程,它的底层相当的庞大,我很认真的看源码,但是其中有很大一部分我都看不懂,我想知道从session.saveOrUpdate(Object javaBean)此方法开始到结束,那个作者是怎么想出来的,那么多的成员变量和局部变量,都是用在哪里的,要怎么看hibernate的源码?
Session.saveOrUpdate()目的是为了 新增或者更新 ---执行sql语句 insert或者update
但是insert 或update是自动生成所以要有org.hibernate.sql包来生成sql,还有事物的设置,
但是我能想到的做一个hibernate的需求就这么多了,可是源码中的变量和类多的都不敢想象,我在想它们都用在那个流程,起到什么作用,真是没有办法啦、啊啊啊啊啊啊
最好-->能够给我提供一些好的书本或者文章(专门针对hibernate底层框架<其他的框架spring、struts2也要>的书或者文章),我在网上完全搜不到hibernate的底层的知识,根本就没有半个人写过关于hibernate底层的东西,我渴望了解它的底层,希望有IT界的朋友帮帮忙,我会感激不尽,真的、谢谢

1个回答

qq_36395112
qq_36395112   2017.11.08 09:10

底层实现没看过,不过saveOrUpdate 的实现可以用sql语句 INSERT INTO xxx VALUES xxx ON DUPLICATE KEY UPDATE xxx 来实现它,根据主键id
或unique SQL会自己决策是保存还是更新

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
hibernate的Session的saveOrUpdate等方法的使用
hibernate的Session的saveOrUpdate等方法的使用
hibernate——Session接口中定义的saveOrUpdate()方法浅析
Session接口中定义的saveOrUpdate方法,集合了save和update方法,根据对象的状态来选择是进行保存还是更新,那它是怎么判断当前对象的状态的呢?API中对这个方法是这样说的,它是根据一个unsaved-value来决定的。这个值是在映射文件中的标签中的一个属性。标签表示的是表的主键,若主键是字符串,那么这个值默认的是空,如果主键是int型,那么这个值默认的是0。然而我们可以改变
hibernate中两表一对一关系 和 session.save()方法和 session.saveOrUpdate()方法
问题描述:在做hibernate和struts2整合的小项目(学生管理系统)中,将学生对应的紧急联系人在页面上输入信息后保存到数据库中。 contact.jsp页面显示 这里分析的学生和紧急联系人是一对一的关系,这两个表的主键都是id设置自动增长,联系人主键id作为学生表的外键cid。 Student(id,cid,name,sex,phone,grade,photo) 从表
Hibernate持久层方法汇总
Hibernate持久层方法汇总 session.load, session.find, session.iterator, session.save, session.update, session.saveorupdate
Hibernate底层代码详解
hibernate是一个持久化操作 运行原理: 1:hibernate.cfg.xml是配置文件,通过配置文件建立与数据库连接的信息(用户名,密码,数据库,数据库驱动)它通过mapping映射到需要与数据库关联的类 2:类.hm.xml映射文件,配置要操作的数据表的字段 3:pojo持久化类   1:创建一个 Configuration的对象,用于加载配置文件 2:创建一个Sessio
一个SaveOrUpdate的不执行问题
一个SaveOrUpdate的不执行问题 转自:http://hi.baidu.com/dmworld_2012/blog/item/238c40936d7fa394a877a443.html 原因相信大家都知道,因为在hibernate中同一个session里面有了两个相同标识 但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会
Hibernate save, saveOrUpdate, persist, merge, update 区别
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原因。假如两个实体之间有关系(例如employee表和address表有一对一关系),如果在没有事务的情况下调用这个方法保存employee这个实体,除非调用flush()这个方法,否则仅仅emplo
hibernate一些底层实现的解析
一、SessionFactory.openSession() 这里会通过调用hibernate的ConnectionProvider接口的getConnection()获取Connection,而实际执行的有三个类继承ConnectionProvider: 1、DatasourceConnectionProviderImpl通过数据源获取:dataSource.getConnection();
解决Hibernate的session.save/update/delete操作无效问题(事务管理)
近期开始玩Hibernate了,因为之前开发用的都是Mybatis,刚开始用Hibernate发现了许多问题。 其中一个问题就是session.save/update/delete无效的问题。 导致这个问题最可能的原因是未开启事务。 Hibernate的增删改操作都是要提交才能生效的,当我们执行session.save(obj)操作后,其实并没有提交。 有两种解决方案 一、开启事务管理
Hibernate数据更新——Session.update/Session.saveOrUpdate
关键字: hibernate update saveorupdateHibernate数据更新——Session.update/Session.saveOrUpdate Session.update执行步骤: 1. 首先根据待更新实体对象的Key,在当前session的内部缓存中进行查找,如果发现,则认为当前实体对象已经处于Persistent状态,返回。从这一点可以看出,对一个Persist