transaction简介

来源:互联网 发布:药物合成工艺优化 编辑:程序博客网 时间:2024/05/25 01:35

transaction:事务。在执行某个session方法时,必须将其放在一个事务之中。hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式来处理。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。


JDBC是默认自动提交事务,若想hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。就可在hibernate中不使用事务(此方法不推荐)
注:实现doWork()方法,重写里面的execute()方法。调用session.save()后,还要调用session.flush()来强制输出sql语句。

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();        //创建服务注册对象        ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();        //创建会话工厂对象        sessionFactory=config.buildSessionFactory(serviceRegistry);        //会话对象,打开会话        session=sessionFactory.openSession();               //打开事务//      transaction=session.beginTransaction();    }    @After    public void destory(){ //释放资源        //提交事务//      transaction.commit();        //关闭会话        session.close();        //关闭会话工厂        sessionFactory.close();    }    @Test    public void testSaveStudents(){        //生成学生对象        Students s=new Students(3,"张三丰","男",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();  //强制输出sql语句    }}

这样不用在hibernate中使用事务,可将数据存储在数据库中。

0 0
原创粉丝点击