hibernate的transaction简介

一 简介
1、hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
2、如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这样做)
 
二 当将开启事务和提交事务关闭
        public void init(){
            // 创建配置对象  
            Configuration config = new Configuration().configure();
            //config.addClass(Students.class);
            // 创建服务注册对象
            ServiceRegistry serviceRegistery = new          ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
            // 创建会话工厂对象
            sessionFactory = config.buildSessionFactory(serviceRegistery);
            // 创建会话对象
            session = sessionFactory.openSession();
            // 开启事务
            //transaction = session.beginTransaction();
        }
        
        @After
        public void destory(){
            // 提交事务
            //transaction.commit();
            // 关闭会话
            session.close();
            // 关闭会话工厂
            sessionFactory.close();
        }
不开启事务就不能将对象保存到数据库中!
控制台输出:
Hibernate:
    drop table if exists STUDENTS
Hibernate:
    create table STUDENTS (
        SID integer not null,
        SNAME varchar(255),
        GENDER varchar(255),
        BIRTHDAY datetime,
        ADDRESS varchar(255),
        primary key (SID)
    )
九月 17, 2017 5:35:15 下午 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
 
三 设置自动提交方式
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
//测试类
public class StudentsTest {
    
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;
    @Before
    public void init(){
        // 创建配置对象   
        Configuration config = new Configuration().configure();
        //config.addClass(Students.class);
        // 创建服务注册对象
        ServiceRegistry serviceRegistery = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        // 创建会话工厂对象
        sessionFactory = config.buildSessionFactory(serviceRegistery);
        // 创建会话对象
        session = sessionFactory.openSession();
        // 开启事务
        //transaction = session.beginTransaction();
    }
    
    @After
    public void destory(){
        // 提交事务
        //transaction.commit();
        // 关闭会话
        session.close();
        // 关闭会话工厂
        sessionFactory.close();
    }
    
    @Test
    public void testSaveStudents(){
        Students s= new Students(1,"张三丰","男",new Date(),"武当山");
        session.doWork(new Work(){
            @Override
            public void execute(Connection connection) throws SQLException {
                // TODO Auto-generated method stub
                connection.setAutoCommit(true);
            }
            
        });
        session.save(s);
        session.flush();
    }
}
控制台输出:
Hibernate:
    drop table if exists STUDENTS
Hibernate:
    create table STUDENTS (
        SID integer not null,
        SNAME varchar(255),
        GENDER varchar(255),
        BIRTHDAY datetime,
        ADDRESS varchar(255),
        primary key (SID)
    )
九月 17, 2017 5:46:00 下午 org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate:
    insert
    into
        STUDENTS
        (SNAME, GENDER, BIRTHDAY, ADDRESS, SID)
    values
        (?, ?, ?, ?, ?)
 

猜你喜欢

转载自cakin24.iteye.com/blog/2398682