首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用Hibernate SessionFactory

重用Hibernate SessionFactory
EN

Stack Overflow用户
提问于 2015-12-23 10:08:47
回答 1查看 2.5K关注 0票数 1

我有两个类实例变量:userSF,它是一个SessionFactoryuserCfg,它是一个为使用user.cfg.xml而设置的Configuration。当我让某人登录到我的应用程序时,他们的数据库登录信息被从文件中抓取,会发生以下情况:

代码语言:javascript
复制
userCfg.setProperty("hibernate.connection.username", username);
userCfg.setProperty("hibernate.connection.password", password);
userSF = userCfg.buildSessionFactory();

当用户注销应用程序时,它会关闭会话工厂。然后,当另一个用户尝试登录时,将调用相同的代码,并根据登录的用户更改用户名和密码。问题是,第二次调用它时,我得到了一个异常:

代码语言:javascript
复制
org.hibernate.HibernateException: HHH000469: The ClassLoaderService can not be reused. This instance was stopped already.

有没有办法在多次登录时重用SessionFactory变量?

EN

回答 1

Stack Overflow用户

发布于 2015-12-23 10:11:57

您不应为每个登录的用户/配置创建SessionFactory。它是一个非常昂贵的组件,应该以Singleton模式为目标。在您的应用程序中为每个上下文使用单个实例。

如果您有多个配置,则可以在应用程序范围内缓存多个实例。根据应用程序的不同,这可能是使用Map<MyUserPasswordKey, SessionFactory>的静态Singleton类,也可能是JAVA-EE容器中的JSF或@ApplicationScoped -Bean。

如果基于user-password键的上下文将导致过多的SessionFactory实例,您可能应该更改您的应用程序,以便在权限组中管理它们,或者将您的功能限制在数据访问层或服务层中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34427520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档