创建每个请求的Hibernate会话(Create Hibernate-Session per Re

2019-07-29 03:03发布

我刚开始负责管理使用Hibernate一些实体,并提供一个REST接口来操纵这些对象,并提供一些额外的业务逻辑的简单Java testproject。 其余接口使用的RESTEasy和Jetty创建。

一切工作正常,到目前为止,但我有我实际编写了太多的样板代码的感觉。 由于我没有在这些Java框架我只是想知道太多的经验,如果任何人都可以给我就如何改善这种情况的提示。

  1. 每个请求Creting Hibernate的会话

那么,据我了解我要创建每个请求一个Hibernate会话,并在年底我必须关闭它。 所以目前我所有的服务方法是这样的:

Session session = HibernateUtil.getInstance().getSessionFactory().openSession();
...
...
...
session.close();

有没有什么办法,以某种方式自动执行此操作删除这两条线? 目前,我的服务被注册为RestEasy的单。 将更改为RestEasy的的ressource和创建在构造函数中会解决这个问题? 我认为这将解决创建会话的问题。 但wherer关闭它?

在C ++中,这可以容易地进行将建立一个范围的对象,其在端部关闭会话。 但在Java?

  1. 每当这样的REST请求时我要检查一个有效的会话(用户必须事先登录)。 是ServletFilter中做到这一点的正确方法?

一般:我还应该考虑使用其他任何图案或框架? 我的意思是我想保持尽可能简单,尤其是因为我不那么多的经验,我不想落得使用Spring或任何重量级的框架。 看来,我已经习惯了Python和Django的的简单,但对于这个小项目,我不得不使用Java。

感谢这么远!

Answer 1:

Hibernate的管理会话当前推荐的做法是这样详细的维基页面 。 具体而言,我认为你需要阅读的最后一段: 这是非常困难的,不能这样做更容易?

最后,你需要告诉持久层说:“我要做些什么”(通常也得到会话做到这一点的)和“我做这样做”。 你可以用做注释 ,或JTA事务 ,但这些信息仍然需要沟通!



Answer 2:

注入的SessionFactory到您的数据访问对象,并使用sessionFactory.getCurrentSession()来访问Hibernate的Session对象。 你可以使用任何可用来实现这个工厂类的..

那么你的代码看起来应该是这样..

sessionFactory.getCurrentSession().save(newInstance); 


Answer 3:

你应该试着写一个过滤器,做到这一点。 Spring的是的OpenSessionInViewFilter如果你需要一个例子来一个良好的开端。



文章来源: Create Hibernate-Session per Request