hibernate session译文

来源:互联网 发布:linux怎么删除目录 编辑:程序博客网 时间:2024/04/24 18:45
###########################
######org.hibernate #######
#####Interface Session#####
###########################
session是java程序和Hibernate中间的主要运行时接口
session的生存周期的界限是在事务的开始到结束(大事务可能会消耗几个数据库来处理)
session的主要方法是为实例到映射类提供创建,查询 和删除操作;实例可能存在三种状态:

1.瞬时状态 数据库中无数据也没有session
2.持久化状态 有数据有session
3.离线状态 无session有数据


瞬时状态的实例可以通过 sava() persost() 或者 saveOrUpdate() 来实现持久化
持久化状态的实例可以通过delete() 变成瞬时状态
任何状态实例返回 get() 和load() 方法就是持久化
离线状态的的实例 可以通过 update(), saveOrUpdate(), lock()or replicate().来实现持久化,
瞬时状态或者离线状态实例可以通过merge(),save() and persist() 来实现是持久化或者作为一个新的持久化实例;result in an SQL INSERT, delete() in an SQL DELETE and update() or merge() in an SQL UPDATE.


但是他并不能实现线程安全,反而是每个线程和事务都必须实现自己的sessionFactory实例
一个Sesssion实例如果他的持久化类是序列化(serializable)的话就要实现序列化
一个典型的事务要用到下面的方言;
*******************************####
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抛出了异常name 事务就必须回滚回原来的状态并且session还会被丢弃,session 的内在状态在异常发生后并不会一直都和数据库一致
原创粉丝点击