Hibernate数据保存操作方法的原理对比
http://www.diybl.com/ 2008-1-11 网络 点击:
[ 评论 ]
文章搜索:
【点击打包该文章】
转自:http://fantasyyong.javaeye.com/blog/146685
首先看看中文翻译的Hibernate的Session的javadoc
Interface Session
All Superinterfaces:
Serializable
All Known Subinterfaces:
EventSource, Session
All Known Implementing Classes:
SessionImpl
public interface Session
extends Serializable
Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)
引用
Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。
实例可能以下面三种状态存在:
瞬态或者自由态(transient): 不曾进行持久化,未与任何Session相关联
持久化状态(persistent): 仅与一个Session相关联
脱管状态或者游离态(detached): 已经进行过持久化,但当前未与任何Session相关联
游离状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。
持久化实例可以通过调用 delete()变成游离状态。
通过get()或load()方法得到的实例都是持久化状态的。
游离状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。
游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。
对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。
saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE。
其具体实现并不一定是线程安全的。每个线程/事务应该从一个SessionFactory获取自己的session实例。
如果其持久化对象类是可序列化的,则Session实例也是可序列化的。
一个典型的事务应该使用下面的形式:
Java代码
如果Session抛出了异常, 事务必须回滚而session会被废弃。在异常发生后Session的内部状态可能会与数据库失去同步。
引用
save方法
public Serializable save(Object object)
throws HibernateException
Persist the given transient instance, first assigning a generated identifier.
(Or using the current value of the identifier property if the assigned generator is used.)
This operation cascades to associated instances if the association is mapped with cascade="save-update".
持久化指定的游离态对象,首先要分配一个自动生成的主键标示符。
(或者如果主键生成器正在使用,使用当前主键标示符属性值)
如果关联关系映射配置了cascade="save-update"属性,save操作对关联对象级联操作。
Parameters:
object - a transient instance of a persistent class
一个要持久化类的自由状态的实例对象
Returns:
the generated identifier
返回生成的主键标示符
Throws:
HibernateException
实例:
Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。
如下面的代码:
Java代码
Hibernate数据保存操作方法的原理对比
转自:http://fantasyyong.javaeye.com/blog/146685
首先看看中文翻译的Hibernate的Session的javadoc
Interface Session
All Superinterfaces:
Serializable
All Known Subinterfaces:
EventSource, Session
All Known Implementing Classes:
SessionImpl
public interface Session
extends Serializable
Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)
引用
Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。
实例可能以下面三种状态存在:
瞬态或者自由态(transient): 不曾进行持久化,未与任何Session相关联
持久化状态(persistent): 仅与一个Session相关联
脱管状态或者游离态(detached): 已经进行过持久化,但当前未与任何Session相关联
游离状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。
持久化实例可以通过调用 delete()变成游离状态。
通过get()或load()方法得到的实例都是持久化状态的。
游离状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。
游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。
对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。
saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE。
其具体实现并不一定是线程安全的。每个线程/事务应该从一个SessionFactory获取自己的session实例。
如果其持久化对象类是可序列化的,则Session实例也是可序列化的。
一个典型的事务应该使用下面的形式:
Java代码
- Session sess = factory.openSession();
- Transaction tx;
- try {
- tx = sess.beginTransaction();
- //do some work
- ...
- tx.commit();
- }
- catch (Exception e) {
- if (tx!=null) tx.rollback();
- throw e;
- }
- finally {
- sess.close();
- }
Session sess = factory.openSession(); Transaction tx; try { tx = sess.beginTransaction(); //do some work ... tx.commit(); } catch (Exception e) { if (tx!=null) tx.rollback(); throw e; } finally { sess.close(); }如果Session抛出了异常, 事务必须回滚而session会被废弃。在异常发生后Session的内部状态可能会与数据库失去同步。
引用
save方法
public Serializable save(Object object)
throws HibernateException
Persist the given transient instance, first assigning a generated identifier.
(Or using the current value of the identifier property if the assigned generator is used.)
This operation cascades to associated instances if the association is mapped with cascade="save-update".
持久化指定的游离态对象,首先要分配一个自动生成的主键标示符。
(或者如果主键生成器正在使用,使用当前主键标示符属性值)
如果关联关系映射配置了cascade="save-update"属性,save操作对关联对象级联操作。
Parameters:
object - a transient instance of a persistent class
一个要持久化类的自由状态的实例对象
Returns:
the generated identifier
返回生成的主键标示符
Throws:
HibernateException
实例:
Session.save()方法用于实体对象的持久化保存,也就是说当执行session.save()方法时会生成对应的insert SQL语句,完成数据的保存。
如下面的代码:
Java代码
- public static void insertUser()
- {
- Session sess = HibernateSessionFactory.getSession();
- User user = new User();
如果图片或页面不能正常显示请点击这里 站内搜索:
推荐文章 |
