0 0

对Save方法和Persist方法仍然有疑问,垦盼指点10

看了http://opensource.atlassian.com/projects/hibernate/browse/HHH-1273的说明,试验了一下,还是有疑问,盼望解答
为了大家方便,我把原文贴出来
引用
persist() is well defined. It makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. The spec doesn't say that, which is the problem I have with persist().

persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context.

A method like persist() is required.

save() does not guarantee the same, it returns an identifier, and if an INSERT has to be executed to get the identifier (e.g. "identity" generator, not "sequence"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context.

[ Show » ] Christian Bauer - 12/Oct/06 08:04 AM In case anybody finds this thread... persist() is well defined. It makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. The spec doesn't say that, which is the problem I have with persist(). persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context. A method like persist() is required. save() does not guarantee the same, it returns an identifier, and if an INSERT has to be executed to get the identifier (e.g. "identity" generator, not "sequence"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context.

引用
persist"保证",当它在一个transaction外部被调用的时候并不触发一个Sql Insert,这个功能是很有用的,
save"不保证"第2条,它要返回标识符,所以它会立即执行Sql insert,不管是不是在transaction内部还是外部
我自己编写的代码如下
    Session session1 = HibernateUtil.getSessionFactory().openSession();
	        Transaction tx1 = session1.beginTransaction();
	        tx1.commit();
	        Item item = new Item();
	        item.setItemId("101");
	        item.setItemName("football");
	        session1.save(item); //在事务外执行save方法
	        session1.close();
	        HibernateUtil.shutdown();

运行后并没有执行insert语句,这是为啥?
我想我可能理解的不对,请有经验的朋友指点一下,谢谢了
2009年3月07日 22:31

2个答案 按时间排序 按投票排序

0 0

采纳的答案

save 和 persist的唯一区别就是 在没有开启事物的条件下 ,save会产生insert语句,然后事物回滚 ,取消插入。而persist不会产生insert语句

2009年3月07日 22:31
0 0


引用
您好,看了您的博客,我也是初学,想请教您个问题,详见http://www.iteye.com/problems/12480
我也看了ytsunwei 的回答,但是我在Eclipse中没有添加事务代码,执行Save后仍然没生成任何sql语句,恳请您指点指点,谢谢您了


回复:
我在我本地测试了一下, save不在事务中时,所以它会立即执行Sql insert.

			session = HibernateUtil.getSeesion();
			final Transaction tx = session.beginTransaction();
			tx.commit();
			session.save(depart); //先插入部门
			session.save(em1); //后插入员工
			session.save(em2);


控制台输出了SQL:
Hibernate: insert into Department (`name`) values (?)
Hibernate: insert into Employee (`name`, depart_id) values (?, ?)
Hibernate: insert into Employee (`name`, depart_id) values (?, ?)

2009年3月08日 16:14

相关推荐

    Hibernate save persist merge探究

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1218885

    save, saveOrUpdate, persist, merge, update 区别.docx

    hibernate save()方法... 假如两个实体之间有关系(例如employee表和address表有一对一关系),如果在没有事务的情况下调用这个方法保存employee这个实体,除非调用flush()这个方法,否则仅仅employee实体会被保存。

    React通过redux-persist持久化数据存储的方法示例

    主要介绍了React通过redux-persist持久化数据存储的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java Hibernate save()与persist()区别

    本文章来给各位同学介绍一下Hibernate save()与persist()区别,希望此文章能对各位同学对于Hibernate save()与persist()有所理解

    persist4j,类AJQL语法糖的ORM工具集.zip

    Record 包含了诸多 setter 和 getter 方法,在实现动态化 DAO 职责的同时,还具备对不同数据(字段)类型进行校验的能力。以下是一个基本的使用示例。 Query 对象 Query 的使用主要是对 persist4j 独有的 AJQL ...

    一加8传感器分区文件persist.img+修复步骤

    一加8传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应慢或者其他...

    Persist.NET开源框架

    Persist.NET是C#编写的一款完整的持久层框架

    一加8T传感器分区修复文件persist

    一加8T传感器分区修复文件...方法为解锁后fast刷入persist分区 或者twrp里写入镜像方式恢复 需要的友友下载使用 参考教程 https://blog.csdn.net/u011283906/article/details/125516321?spm=1001.2014.3001.5501

    Hibernate:有了 save,为什么还需要 persist?.docx

    万物皆自然,每个 API 的设计,无论是否正确,都有其意图。因此,在学习某些框架的时候,我们需要经常思考:这个 API 的设计意图是啥? 本文来探讨一下 Session 中 persist 的设计意图。。。。。。。。。。。。。。...

    一加7pro传感器分区文件persist.img+修复步骤

    一加7pro传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应慢或者...

    一加8T传感器分区文件persist.img+修复步骤

    一加8T传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应慢或者其他...

    warp-persist-2.0-20090214.zip

    warp-persist框架:封装Hibernate和JPA,提供事务管理和持久化资源管理 warp-dynamic-finder:提供了基于Annotation的动态查询功能,让数据库查询变得异常简单,不再需要DAO层 warp-mvc:借鉴了Tapestry5,提供了...

    Delegated persist ordering 中文翻译

    Delegated persist ordering 论文的翻译,华中科技大学课程 计算机系统性能与分析课指定翻译论文之一

    一加8pro传感器分区文件persist.img+修复步骤

    一加8pro传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应慢或者...

    一加7TPro迈凯伦传感器分区文件persist.img+修复步骤

    一加7TPro迈凯伦传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应...

    前端项目-redux-persist.zip

    前端项目-redux-persist,persist and rehydrate redux stores

    红米note8传感器分区文件persist.img+修复步骤

    红米note8传感器分区文件persist.img+修复步骤 资源说明: 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者...

    一加7T传感器分区文件persist.img+修复步骤

    一加7T传感器分区文件persist.img+修复步骤 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应慢或者其他...

    小米8传感器分区文件persist.img+修复步骤

    小米8传感器分区文件persist.img+修复步骤 资源说明: 如果你刷机 更新 降级或者刷写第三方系统或者修改系统文件后有以下问题, 应该就是传感器分区出问题了 以下问题包括 但不限于全部 1-----相机 打不开或者反应...

    dva-model-persist:类似redux-persist和dva-redux-persist和工具

    dva-model-persist 软件架构 适用于 dva 项目 Why 之前基于redux-persist@5.*开发的dva-resist-persist,在异步加载model时并不会存贮model的state,所以使用redux的enhancer特性开发这个支持异步model加载的工具 ...

Global site tag (gtag.js) - Google Analytics