1

我们目前正在使用 Spring MVC 来实现 REST Web 服务。我们现在想要实现某种数据持久性,我正在研究有哪些选项。Spring Transactions + Hibernate + MySQL 似乎是一种非常流行的方法,但我看过的每一个博客/教程都有不同的做法。

任何人都可以指导我使用 Spring 进行数据持久性的“最佳实践”吗?我想让它基于注释,因为这对我来说似乎更自然和可维护。

但现在在某些地方我已经读过不HibernateTemplate应该再使用了。有些人使用*Dao接口和*DaoImpl with @Repositoryapproach,而另一些人使用*Service with @Serviceapproach。

提前感谢您的任何建议。

4

3 回答 3

4

HibernateTemplate 确实不是很有用,Spring 文档建议考虑不要再使用它。

@Repository 和 @Service 基本上做同样的事情,除了(AFAIK)两件事:

  • @Repository 明确表明该服务是 DAO,而不是业务服务
  • @Repository 注释服务抛出的异常被转换为 Spring 的持久性异常类。这意味着您不会得到 Hibernate 异常,而是包装 Hibernate 异常的 Spring 异常。
于 2011-11-24T10:34:56.437 回答
1

当休眠不支持每个线程一个会话的概念时,需要休眠模板。现在更好的方法是直接在 SessionFactory 上使用 getCurrentSession 方法。

使用 HibernateTemplate 的另一个问题是,如果 SessionFactory 上公开了更新的 api,则必须等待新版本的 Hibernate 模板来支持它。

一言以蔽之,直接使用SessionFactory

于 2011-11-24T11:23:32.587 回答
0

在 HibernateTemplate 文档中不鼓励使用 HibernateTemplate

http://static.springsource.org/spring/docs/2.0.3/api/org/springframework/orm/hibernate3/HibernateTemplate.html

注意:从 Hibernate 3.0.1 开始,事务性 Hibernate 访问代码也可以用普通的 Hibernate 样式编码。因此,对于新开始的项目,请考虑采用基于 SessionFactory.getCurrentSession() 的标准 Hibernate3 编码数据访问对象的风格。(Spring 的 LocalSessionFactoryBean 自动支持 Hibernate3 getCurrentSession() 方法的 Spring 事务管理。)

@Repository 或 @Service 的使用没有任何区别,但我相信这些注释在未来会有进一步的 DAO/Service 级别支持,这将使它们的使用更加精确。

我个人更喜欢在 DAO 层使用 @Repository 来划分我的服务和业务层。

于 2011-11-28T11:11:11.470 回答