可以使用Hibernate的Interceptor對數(shù)據(jù)稽核,它避免了使用Lifecycle對Hibernate 的依賴。減少了Hibernate的侵入性。
使用sessionFactory.openSession(interceptor)
使其與session相關(guān)聯(lián)。
但是常用的還是他的adaptor類EmptyInterceptor。我們只需要extends EmptyInterceptor,然后針對我們想要的方法進行override。
注意:Lifecycle和Interceptor都不能調(diào)用當前的session進行操作,因為他們接口中定義的方法都是由當前session負責調(diào)用的,如果在這些方法中又調(diào)用了當前session的話,就會導(dǎo)致管理混亂。解決方法有兩種:1。創(chuàng)建一個新的session。但是兩個不同的session獨占兩個數(shù)據(jù)庫連接,完成一個操作,對并發(fā)量大的系統(tǒng)來說是個奢侈。2。重用當前數(shù)據(jù)庫連接。使用session.connection()傳遞一個JDBC的Connection,然后tempSession=sessionFactory.openSession(connection),這樣雖然是兩個session,但是只有一個數(shù)據(jù)庫連接,由于是共享數(shù)據(jù)庫連接,那么tempSession就不需要進行close()了