Java @基于JpaRepository的事务性

Java @基于JpaRepository的事务性,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在使用只读数据库将一些数据输入到我的项目中。我们将SpringV3与jpa和hibernate一起使用 以下注释是否会使对我的存储库的所有调用都成为只读事务?或者我需要调用存储库的服务层上的注释吗 package com.blah.jpa; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.transaction.annotation.Transactional;

我正在使用只读数据库将一些数据输入到我的项目中。我们将SpringV3与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> {

}
package com.blah.jpa;
导入org.springframework.data.jpa.repository.JpaRepository;
导入org.springframework.transaction.annotation.Transactional;
@事务(只读=真)
公共接口ServiceToServerRepository扩展了JpaRepository{
}

所以我们可以免费得到所有的findOne,findAll。但是任何更新都应该失败,因为基本上应该是一个只读事务。但我通常选择使用
Transactional
注释标记服务层工件。无论如何,还请查看这篇文章,了解有关将事务性与Spring数据结合使用的更多信息:

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

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