【问题标题】:Layer to use the @Transactional annotation in Spring Data JPA在 Spring Data JPA 中使用 @Transactional 注释的层
【发布时间】:2014-04-26 20:24:41
【问题描述】:

我在我的应用程序中使用 Spring Data JPA,它有以下几层:

  1. 服务层,带有接口和实现(注解@service)
  2. CRUD 存储库层与 Spring Data JPA,以及自定义存储库实现
  3. 实体层

我想知道在哪里放置@Transactional 的正确位置。目前,我在服务层中有它,正在使用存储库。

【问题讨论】:

    标签: java spring hibernate spring-data spring-data-jpa


    【解决方案1】:

    事务属于服务层。例如,如果您有HotelService,那么代码将如下所示:

    @Service("hotelService")
    @Transactional
    public class HotelServiceImpl implements HotelService {
        @Autowired
        HotelDao hotelDao;
    
        // The rest of code omited ...
    }
    

    【讨论】:

    • 另外你不认为在函数级别而不是类级别添加它可能会更好,因为我们可以控制只读事务等吗?
    • @AbhishekRanjan 嗯,这只是一个例子。我通常在class 之前定义@Transactional(readOnly = true),然后如果需要,我在方法之前定义@Transactional(readOnly = false)
    • 是的,听起来不错,我通常做的是在每个功能级别定义事务,但你的方法看起来更干净
    【解决方案2】:

    @Transactional 最好的是什么,如果您有数据库访问权限,则必须输入它。

    Understanding the Spring Framework's declarative transaction implementation

    您只需使用 @Transactional 注释来注释您的类,将 (<tx:annotation-driven/>) 行添加到您的配置中,然后期望您了解它是如何工作的。

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2021-12-24
      • 2015-04-16
      • 2013-01-06
      • 1970-01-01
      • 2018-06-27
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多