Hibernate框架中利用Configuration對象的buildSessionFactory()可以得到一個SessionFactory的對象,顧名思義SessionFactory就是產(chǎn)生Session對象的工廠,而它產(chǎn)生Session的方法有兩種:
成都網(wǎng)站設計、網(wǎng)站建設服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。創(chuàng)新互聯(lián)把每個網(wǎng)站當做一個產(chǎn)品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!1.openSession();
2.getCurrentSesion()
由于在很多面試題中有考察到這個知識點,所以我總結了一下這兩種產(chǎn)生Session方法的區(qū)別。
區(qū)別1.openSession()方法無論在上下文中有沒有Session存在都會建一個新的Session,而getCurrentSession()方法會檢測在上下文環(huán)境中是否有Session存在,如果有,則拿到這個Session;如果沒有則創(chuàng)建一個新的Session。
區(qū)別2.openSession()方法創(chuàng)建的Session在最后必須調用close()方法,而getCurrentSession()方法創(chuàng)建的Session在調用commit()方法后無需再調用close()方法(最好不要調用,會產(chǎn)生不必要的錯誤)。
區(qū)別3.getCurrentSession()方法的用途是界定事物邊界。
Ps:在一次測試中發(fā)現(xiàn)當先調用openSession()方法產(chǎn)生Session后,再調用getCurrentSession()方法得到的并不是之前產(chǎn)生的那個Session,而是一個新的Session。
解釋一下上面所提到的上下文,這里所說的上下文是在hibernate.cfg.xml中指定的,其中有兩個常用的取值,分別是thread和jta。這兩者的區(qū)別在于thread適用于單Connection,他的事物由數(shù)據(jù)庫連接Connection管理;而jta適用于多Connection(跨數(shù)據(jù)庫)的分布式程序(當然單Connection也可以),他的事物由application server提供的專門的事物管理器來管理。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。