我正在使用只读数据库将一些数据输入到我的项目中。我们使用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是免费的。但任何更新都应该失败,因为它是一个只读事务
答案 0 :(得分:5)
基本上应该这样做。但我通常选择使用Transactional
注释标记服务层工件。无论如何,请查看这篇文章,了解有关使用事务性和Spring Data的更多信息:How to use @Transactional with Spring Data?
答案 1 :(得分:5)
readOnly标志仅提示调用方法时只读事务就足够了。
如果您的服务层中有一个非只读的嵌套事务,那么它将使用该事务,您将有效地忽略此注释。