1

我已经将我的应用程序从 Hibernate 3 升级到了 4。

我有一些线程变量,我在其中保留了有关尝试登录的客户端的一些信息。问题是在休眠 4 之前,我可以从我的自定义 ConnectionProvider 访问这些变量。但是现在,每次我尝试访问这些变量时,我都会得到一个空值。

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() 方法时,该变量为空。

有什么可能是错的?

4

0 回答 0