Hibernate save()与persist()区别

Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯。另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句, 这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。

这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别)

主要内容区别:
1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。

2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert

时间: 2024-08-02 17:16:31

Hibernate save()与persist()区别的相关文章

java Hibernate save()与persist()区别_java

Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯.另一方面,save()和 persist()方法还有一个区别:使用 save() 方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值):但使用 persist() 方法来保存持久化对象时,该方法没有任何返回值.因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save() 会立即将持久化对象对应的数据插入数据库:而 persist

Hibernate学习之------>Hibernate的保存的区别

hibernate的保存 hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别: 一.预备知识: 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient.persistent.detached 下边是常见的翻译办法: transient:瞬态或者自由态 persistent:持久化状态 detached:脱管状态或者游离态 脱管状态的实例可以通过调用save().persist()或者saveOrUpdate()方法进行持久化

spring整合hibernate-getHibernateTemplate().save()与session.save()有什么区别啊,哪个更好啊?

问题描述 getHibernateTemplate().save()与session.save()有什么区别啊,哪个更好啊? 如题:getHibernateTemplate().save()与getHibernateTemplate().getSessionFactory().getCurrentSession().save()有什么区别啊,哪个更好啊? 解决方案 getHibernateTemplate().save()方法是经过spring封装的,例如添加相应的声明式事务管 理,由sprin

hibernate save方法出错

问题描述 hibernate save方法出错 对应的代码: public void saveAService(Services service) { // TODO Auto-generated method stub svcMngDao.save(service); } @Id @Column(name="ID") @GeneratedValue(strategy=GenerationType.TABLE, generator="TableGen") @Tabl

hibernate save、delete添加事务

问题描述 hibernate save.delete添加事务 我是用的myeclipse,在添加hibernate框架的时候,自动生成了xxxxxDao方法,在这里边有save跟delete方法,但这些方法都默认的使用了事务.当我调用他们的时候可能需要多个save放到一个事务里执行,这样就会报错,应该怎么办呢 解决方案 你自动生成的这个xxxxDao是个什么东西啊,我添加hibernate框架时除了自动生成配置文件和映射文件外从来就没有生成多余的东西;自动生成的东西你把它删 除自己写不可以吗.

Hibernate save() saveorupdate()的用法第1/2页_JSP编程

一个PO有三种状态: 1.未被持久化的VO 此时就是一个内存对象VO,由JVM管理生命周期 2.已被持久化的PO,并且在Session生命周期内 此时映射数据库数据,由数据库管理生命周期 3.曾被持久化过,但现在和Session已经detached了,以VO的身份在运行 这种和Session已经detached的PO还能够进入另一个Session,继续进行PO状态管理,此时它就成为PO的第二种状态了.这种PO实际上是跨了Session进行了状态维护的. 在传统的JDO1.x中,PO只有前面两种状

Hibernate get和load区别

get和load方式是根据id取得一个记录 下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来.   1.从返回结果上对比:load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null   2.从检索执行机制上对比: get方法和find方法都是直接从数据库中检索 ? 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接

struts2 jsf jpa ejb spring hibernate 都有什么区别?

问题描述 struts2jsfjpaejbspringhibernate可以组成几种开发框架,例如ssh.并且每种组合在安全稳定方面,运行速度效率,开发的复杂程度方面,有什么区别,详细点,谢谢.

hibernate save

问题描述 save()之后的其他操作可能会报错,我在save()加了commit 会保存成功.但是之后的其他操作会报错:Transaction not successfully started有什么办法save()之后的其他操作报错他能save成功.之后的操作又不会有错.试了一些方法,不行. 解决方案 你要先开启事物,开启事物之后在commit,操作之后还要记得关闭session和sessionFactory解决方案二:Transaction not successfully started 这