一尘不染

为每个请求创建休眠会话

hibernate

我刚刚启动了一个简单的Java测试项目,该项目使用Hibernate管理某些实体,并提供REST接口来操纵这些对象并提供一些其他业务逻辑。REST接口是使用RESTEasy和Jetty创建的。

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

  1. 每个请求创建hibernate会话

嗯,据我了解,我必须为每个请求创建一个Hibernate会话,最后必须关闭它。因此,目前我所有的服务方法如下:

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

有什么方法可以删除这两行,以便以某种方式自动执行此操作?目前,我的服务已注册为RestEASY单例。更改为RESTeasy资源并在构造函数中创建会话是否可以解决问题?我认为它将解决创建会话的问题。但是哪里关门呢?

在C ++中,可以很容易地创建一个有作用域的对象,该对象最终将关闭会话。但是在Java中?

  1. 每当发出这样的REST请求时,我都必须检查有效的会话(用户必须先登录)。ServletFilter是执行此操作的正确方法吗?

常规:还有其他我应该考虑使用的模式或框架吗?我的意思是我想使其尽可能简单,尤其是因为我没有太多的经验,因此我不想最终使用Spring或任何重量级框架。似乎我已经习惯了Python和Django的简单性,但是对于这个小项目,我必须使用Java。

到此为止!


阅读 203

收藏
2020-06-20

共1个答案

一尘不染

Wiki页面上详细介绍了Hibernate当前推荐的用于管理Session的方法。特别是,我认为您需要阅读最后一段:这都是非常困难的,难道这样做不容易吗?

最后,您确实需要告诉持久层“我将要做某事”(通常也可以让Session完成此工作)和“我已经完成了”。您可以使用批注JTA事务来完成此操作,但仍必须传达该信息!

2020-06-20