现在的位置: 首页 > 综合 > 正文

【整理备用】Hibernate对数据持久化的方法的区别

2013年04月09日 ⁄ 综合 ⁄ 共 967字 ⁄ 字号 评论关闭

参考:http://topic.csdn.net/u/20090712/21/52825CC8-9F4E-4B62-ABDF-E848E74A9C17.html

最近用到Hibernate的merge()方法,和其他方法又搞混了,这次整理一下,以备以后方便查看。

Hibernate里save()、update()、saveorupdate()、merge()方法的区别:

1、save()方法,简单的说就是保存信息到数据库。

该方法用于将一个临时对象转变为持久化对象,也就是将一个新的业务实体保存到数据库中。

2、update()方法,简单的说就是更新数据库表里面的信息。

该方法用于将一个游离对象重新转变为持久化对象,也就是更新一个已经存在的业务实体到数据库中;

3、saveorupdate()方法,简单的说就是数据库里面不存在这条记录就插入,如果存在就更新。(有人说性能低下,建议少用)

该方法兼具了save()和update()方法的功能,根据传入参数的状态执行不同的操作,当为临时状态时,调用save()方法;当为持久化状态时,则直接返回;当为游离状态时,调用update()方法。

对象中如果有主键就修改,如果没有主键就保存。

  1.如果对象已经在本session中持久化了,不做任何事;
  2.如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常;
  3.如果对象没有持久化标识(identifier)属性,对其调用save();
  4.如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save();
  5.如果对象是附带版本信息的(通过或) 并且版本属性的值表明其是一个新实例化的对象,save()它。

4、merge()方法,简单的说就是保存或更新信息到数据库。功能类似saveorupdate(),但又是有区别的。

该方法主要用于更新和保存实体,当实体不存在时,则执行保存操作;当实体已经存在时,则执行更新操作。

merge()方法 和saveorupdate()方法不一样,当session中某持久化对象有id相同的两个纪录时,必须用merge()方法,merge()方法会在保存之前来合并记录,不然会报错。合并记录后的动作和 saveorupdate()方法一样。

抱歉!评论已关闭.