我已将我的应用程序从Hibernate 3升级到4。
我有一些线程变量,我保留了一些有关尝试登录的客户端的信息。 问题是在休眠4之前,我可以从我的自定义ConnectionProvider访问这些变量。但现在,每当我尝试访问这些变量时,我都会得到一个null。
1)这是我尝试访问的变量。它位于我的应用程序的核心。
private static ThreadLocal<Client> currentClient = new ThreadLocal<Client>() {
protected synchronized Client initialValue() {
return null;
}
};
客户端登录后,我使用我的客户端实体设置该线程变量。
2)这就是我创建会话工厂的方式。
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
3)这就是我在自定义ConnectionProvider类中创建会话的方式。
Session s = factory.withOptions().interceptor(new MyInterceptor()).openSession();
4)当我使用在连接提供程序类中创建的会话执行查询时,我尝试在getConnection()方法中访问线程局部变量。我可以使用Hibernate 3访问该值,但是使用hibernate 4我会一直得到空值。
另外,如果我在执行q.list()之前检查该变量,我可以验证该变量是否已设置。但是当调用getConnection()方法时,该变量为null。
可能出现什么问题?