二、hibernate提交事務

一、將讀取配置文件和開啓事務抽象爲一個工具類方便以後操作。

public class HibernateUtil {
    private static Configuration cfg=null;
    private static SessionFactory factory=null;
    private static Session session = null;
    static{
        cfg = new Configuration().configure();
        factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder().configure().build());
    }
    public static Session getSession(){
        if(factory!=null)
            return session=factory.openSession();
        factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder().configure().build());
        return session=factory.openSession();
    }
    public static void closeSession(){
        if(session!=null&&session.isOpen())
            session.close();
    }
}

二、用junit測試

@Test
    public void testSave(){
        Session session = null;
        Transaction tx = null;
        User user = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            user = new User();
            user.setName("吳京");
            user.setPwd("111");
            session.save(user);
            //在持久狀態下;髒數據檢查:當提交事務,清理緩存時發現session中數據
            //和數據庫中數據不一致時,將會把session中的數據更新到數據庫中
            user.setName("蘿莉");
            //在保存以後再修改對象,那麼會產生多天sql語句,效率較低,一般在save前修改
            session.flush();
            tx.commit();//若只刷新不提交數據將不能把髒數據檢查發現的數據存到數據庫中
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("拋出異常!");
            tx.rollback();
        }finally {
            HibernateUtil.closeSession();
        }
        //遊離狀態
        System.out.println("姓名:"+user.getName());

    }

執行結果:
這裏寫圖片描述
執行後發現有兩條sql語句。
這裏寫圖片描述
數據庫中保存的是“蘿莉”而不是“吳京”,說明在提交事務的時候回進行髒數據檢查時,將session中的數據保存到數據庫中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章