我刚刚启动了一个简单的Java测试项目,该项目使用Hibernate管理某些实体,并提供REST接口来操纵这些对象并提供一些其他业务逻辑。REST接口是使用RESTEasy和Jetty创建的。
到目前为止,一切工作正常,但是我感觉我实际上写了太多样板代码。由于我在这些Java框架中没有太多经验,所以我只是想知道是否有人可以给我提示如何改善这种情况。
嗯,据我了解,我必须为每个请求创建一个Hibernate会话,最后必须关闭它。因此,目前我所有的服务方法如下:
Session session = HibernateUtil.getInstance().getSessionFactory().openSession(); ... ... ... session.close();
有什么方法可以删除这两行,以便以某种方式自动执行此操作?目前,我的服务已注册为RestEASY单例。更改为RESTeasy资源并在构造函数中创建会话是否可以解决问题?我认为它将解决创建会话的问题。但是哪里关门呢?
在C ++中,可以很容易地创建一个有作用域的对象,该对象最终将关闭会话。但是在Java中?
常规:还有其他我应该考虑使用的模式或框架吗?我的意思是我想使其尽可能简单,尤其是因为我没有太多的经验,因此我不想最终使用Spring或任何重量级框架。似乎我已经习惯了Python和Django的简单性,但是对于这个小项目,我必须使用Java。
到此为止!
该Wiki页面上详细介绍了Hibernate当前推荐的用于管理Session的方法。特别是,我认为您需要阅读最后一段:这都是非常困难的,难道这样做不容易吗?
最后,您确实需要告诉持久层“我将要做某事”(通常也可以让Session完成此工作)和“我已经完成了”。您可以使用批注或JTA事务来完成此操作,但仍必须传达该信息!