JpaRepository上的@Transactional

时间:2014-03-05 14:23:35

标签: java spring hibernate jpa

我正在使用只读数据库将一些数据输入到我的项目中。我们使用Spring v3和jpa以及hibernate

以下注释是否会使对我的存储库的所有调用都成为只读事务?或者我是否需要调用存储库的服务层上的注释

package com.blah.jpa;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.transaction.annotation.Transactional;

@Transactional(readOnly = true)
public interface ServiceToServerRepository extends JpaRepository<ServiceToServerJPA, String> {

}

所以我们得到所有的findOne,findAll是免费的。但任何更新都应该失败,因为它是一个只读事务

2 个答案:

答案 0 :(得分:5)

基本上应该这样做。但我通常选择使用Transactional注释标记服务层工件。无论如何,请查看这篇文章,了解有关使用事务性和Spring Data的更多信息:How to use @Transactional with Spring Data?

答案 1 :(得分:5)

readOnly标志仅提示调用方法时只读事务就足够了。

如果您的服务层中有一个非只读的嵌套事务,那么它将使用该事务,您将有效地忽略此注释。