使用 guice-persist 自动清除会话
我使用的环境是 guice-servlet 在 tomcat 上运行,并在 guice-persist 下休眠。我遇到的问题是,当我在一个请求中使用 em.getReference() 时,加载的代理对象保留在实体管理器缓存中,并且可能出现在另一个请求中,我希望在该请求中完全从数据库加载对象。
我曾经在 EJB3 环境中使用 hibernate,这是默认行为。对于每个新请求,实体管理器缓存都是清晰的。 guice-persist 为每个请求清除会话不是更安全的行为吗?或者至少将其作为 JpaPersistModule 的设置?
hibernate SessionImpl 中有一个特殊的标志“autoClear”,它负责 EJB3 的行为。当 JpaPersistModule 创建新的实体管理器时,有什么方法可以启用该标志吗?
I'm using an environment with guice-servlet running on a tomcat and hibernate under guice-persist. The problem I've encountered is that when I use em.getReference() in one request the loaded proxy object stays in the entitymanager cache and may appear in another request where I expect to have an object completely loaded from the DB.
I used to using hibernate in EJB3 environment where it is a default behavior. The entity manager cache is clear for each new request. Isn't it a more safe behavior for guice-persist to clear the session for each request? Or at least to give it as a setting for JpaPersistModule?
There is a special flag in hibernate SessionImpl "autoClear" which is responsible for EJB3 behavior. Is there any way I could enable the flag when the new entity manager is being created by JpaPersistModule?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这样解决了:我创建了一个 AOP 拦截器来捕获 JpaPersistService 返回的 EntityManager。
在拦截器内,我通过 EntityManagerImpl 获取 SessionImpl 并设置 autoClear 属性。
Solved it this way: I've created an AOP interceptor to catch EntityManager returned by JpaPersistService.
Inside an interceptor I'm getting SessionImpl through EntityManagerImpl and setting autoClear property.