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语句的输出(不输出的话,数据库依然没有数据)。