只是想问我已经看到一些代码,其中Hibernate会话对象被Spring作为自动连接它作为SINGLETON bean。这样做是好的做法吗?该对象将以多用户环境的形式共享,或者最好将其声明为代理?
答案 0 :(得分:0)
会话不应该是SINGLETON bean,不应该跨应用程序共享。在多用户环境中,每个用户都应拥有自己的会话实例。一种广泛使用的方法是在启动请求时打开会话,并在请求完成时关闭它。 Spring通过提供OpenSessionInViewFilter
来促进这种方法。如果您配置了此过滤器,Spring将负责会话生命周期,您只需使用SessionFactoryUtils.getSession()
方法访问它。如果您使用的是Spring 3.1和Hibernate 4.x,则可以使用sessionFactory.getCurrentSession()
访问会话。