繁体   English   中英

从Interceptor获取Hibernate Session

[英]Get Hibernate Session from Interceptor

我正在编写一个hibernate拦截器,我需要访问hibernate会话对象。 他们是使用拦截器访问hibernate会话的直接方法吗?

我要做的是找出hibernate连接的数据库。 由于各种原因,将线程本地数据存储起来是不切实际的。

是的,有一种方法......只需在创建后将会话传递给Interceptor:

Session session = factory.openSession(interceptor);
interceptor.setSession(session);

你有拦截器内的会话! 请记住:

  1. Interceptor无法访问它正在运行的会话,因此不要直接使用它来更改/添加对象。
  2. 您可以在同一JDBC连接上打开临时会话
  3. 两个会话的交易都是相同的

     try { Connection connection = mySession.connection(); Session tempSession = HibernateUtil.getSessionFactory().openSession(connection); // do something tempSession.flush(); } finally { tempSession.close(); } 

似乎没有通过ohInterceptor通过ohEmptyInterceptor获取会话对象的“官方”方式。 此外, Interceptor的Javadoc说:

SessionFactory可能只有一个Interceptor实例,或者可能为每个Session指定一个新实例。 无论使用哪种方法,如果Session是可序列化的,则拦截器必须是可序列化的。 这意味着SessionFactory范围的拦截器应该实现readResolve()。

可能不会从回调中调用会话(回调也不会导致集合或代理被懒惰地初始化)。

获取此信息的唯一方法似乎是使用反射,并已在此处得到解答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM