Java 为每个请求创建Hibernate会话
我刚刚启动了一个简单的Java测试项目,它使用Hibernate管理一些实体,并提供一个REST接口来操作这些对象,并提供一些额外的业务逻辑。REST接口是使用RESTEasy和Jetty创建的 到目前为止,一切都很好,但我觉得我实际上编写了太多的样板代码。由于我在这些Java框架方面没有太多经验,我想知道是否有人能给我一个如何改进这种情况的提示Java 为每个请求创建Hibernate会话,java,hibernate,jetty,design-patterns,resteasy,Java,Hibernate,Jetty,Design Patterns,Resteasy,我刚刚启动了一个简单的Java测试项目,它使用Hibernate管理一些实体,并提供一个REST接口来操作这些对象,并提供一些额外的业务逻辑。REST接口是使用RESTEasy和Jetty创建的 到目前为止,一切都很好,但我觉得我实际上编写了太多的样板代码。由于我在这些Java框架方面没有太多经验,我想知道是否有人能给我一个如何改进这种情况的提示 为每个请求创建休眠会话 嗯,据我所知,我必须为每个请求创建一个Hibernate会话,最后我必须关闭它。所以目前我所有的服务方法都是这样的: Sess
Session session = HibernateUtil.getInstance().getSessionFactory().openSession();
...
...
...
session.close();
有没有办法删除这两行以便自动执行此操作?
目前我的服务注册为RestEASY singleton。更改为RESTeasy ressource并在构造函数中创建会话会解决问题吗?我认为这将解决创建会话的问题。但是在哪里关闭它呢
在C++中,创建一个关闭对象的对象,可以在结束时关闭会话。但是在爪哇
谢谢你 您应该尝试编写一个过滤器来实现这一点。如果需要示例,Spring的OpenSessionInViewFilter是一个很好的起点。将SessionFactory注入数据访问对象,并使用SessionFactory.getCurrentSession()访问Hibernate会话对象。 您可以使用任何可用的Factory类来实现此功能 那么您的代码应该是这样的
sessionFactory.getCurrentSession().save(newInstance);
Hibernate目前推荐的会话管理方法详细介绍了这一点。特别是,我认为你需要阅读最后一段:
最后,您确实需要告诉持久化层“我将要做某事”(这通常也会让会话来做)和“我已经做了”。你可以用,或者,但是这些信息仍然需要交流 好的,但是我在哪里关闭会话呢?在struts2的情况下,你可以使用拦截器初始化和关闭会话对象。