`
wanglong0537
  • 浏览: 12203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

1月5日

阅读更多
Hivernate Interceptor:接口 onSave onFlushDirty可在save update方法之前执行,以作Log来做历史记录为例 SessionFactory sessionFactory = config.buildSessionFactory(); MyIntercepor it = new MyInterceptor(); Session session = sessionFactory.openSession(it); It.setSession(session); It.setUserID(“currenetUser”); TUser user = new TUser(); User.setName(“Erica”); Transaction tx = session.beginTransaction(); Session.save(user); Tx.conmit(); session.close(); 而在LifeCycle和Interceptor接口中都不能直接调用当前session,而定义的方法都将由当前session负责调用,但如果在这些方法中用了当前session进行持久化操作,则将导致session内部状态的混乱 那么我们可以想到为了将log中的数据同业务数据分离可以重新获得一个新的session进行持久化操作,这种方法完全可行,但从性能上讲,一次操作需要两个数据库连接,势必影响到效率,这种方式有待商榷 既然当前session实例无法重用,重用当前session的数据库连接多少能减少一点性能损耗 我们可以通过Connnection connection = session.connection();得到当前连接,然后 Session tempSession = HibernateUtil.getSessionFactory().openSession(connection); 这里依托session的JDBC connection创建了一个临时性的session用于保存log记录 这里我们就无需再开启事务,这里的JDBC connection与session共享同一个事务。这里我们也不需要close
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics