hibernate-transaction(提交事务)

Hibernate中的事务操作默认是非自动提交的,必须在Session中开启事务并手动提交才能保存对象到数据库。如果不开启事务,即使对象被保存,也不会反映在数据库中。若想实现类似JDBC的自动提交事务,可以通过重写doWork execute方法,设置JDBC连接为自动提交模式,但这种方法并不推荐。flush操作确保SQL语句被输出到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

transtraction对数据库的操作都是封装到事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中;

    @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 student = new Students(1, "张三丰", "男", "武当山");
        session.save(student);
    }

如果此时把transaction注释掉,那在数据库里将不会注入生成的对象信息。
这里写图片描述

如果依旧要注释,但还想让hibernate像jdbc那样自动提交事务,则需重写doWork execute方法,获得jdbc的connection后,设置其为自动提交事务模式(不建议):
flush表示sql语句的输出(不输出的话,数据库依然没有数据)。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值