transaction简介
hibernate对于数据的操作都是封装在事务当中,并且是默认非自动提交的方式。所以session保存对象时,如果不开启事务,并切手工提交事务,对象不会真正的保存在数据库中。
如果想要hibernate像jdbc那样自动提交事务,必须调用session对象的dowork()方法,获得jdbc的connection后,设置其自动提价事务模式。(不推荐)
package test;
import static org.junit.Assert.*;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pojo.Student;
public class testSavestudent {
private Session session;
private Transaction transaction;
@Before
public void init(){
//加载配置文件
Configuration configuration = new Configuration().configure();
//创建session工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
//创建session对象
session = sessionFactory.openSession();
//开启事务
/*
transaction =session.beginTransaction();*/
}
@Test
public void test() {
Student student = new Student("张五",4);
//当不使用transaction事务提交的时候用session自带的dowork实现自动提交哦。
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
connection.setAutoCommit(true);
}
});
session.save(student);
}
@After
public void destory(){
/*transaction.commit();*/
session.flush();
session.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="Mysession">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/studb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- -->
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 实体创建表 对于生成表的自动映射 -->
<mapping resource="pojo/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>