@Repository public interface BatchRepository extends CrudRepository<Batch,Integer> {}
那么就在这里,^例如,这个spring Boot 注解@Repository也会自动附带@Transactional注解吗?还是需要特别声明@Transactional?谢谢我不知道如何测试这个,也找不到任何相关的文档,所以我问栈溢出Maven哈哈。
xdnvmnnf1#
@Repository不会自动添加@ Transactional,您需要明确地提及它。使用最新版本的Spring,您甚至不需要在您的BatchRepository上提供@Repository,Sping Boot 足够智能,可以自动识别出它是CrudRepository的实现,并创建一个BatchRepository存储库bean。
@Repository
@ Transactional
BatchRepository
CrudRepository
@Transactional public interface BatchRepository extends CrudRepository<Batch,Integer> {}
应等同于
@Transactional @Repository public interface BatchRepository extends CrudRepository<Batch,Integer> {}
我更喜欢在服务层而不是存储库层添加@Transactional,因为存储库在业务上下文之外,它不应该知道隔离。
@Transactional
fdx2calv2#
你需要在需要的地方声明@Transactional方法,通常是这样做的(或者不用自动连接lombok注解):
@Service public class TestService{ @Autowired public BatchRepository batchRepository; @Transactional public Batch addBatch(Batch batchToInsert){ return batchRepository.save(batchToInsert); } }
2条答案
按热度按时间xdnvmnnf1#
@Repository
不会自动添加@ Transactional
,您需要明确地提及它。使用最新版本的Spring,您甚至不需要在您的BatchRepository
上提供@Repository
,Sping Boot 足够智能,可以自动识别出它是CrudRepository
的实现,并创建一个BatchRepository
存储库bean。应等同于
我更喜欢在服务层而不是存储库层添加
@Transactional
,因为存储库在业务上下文之外,它不应该知道隔离。fdx2calv2#
你需要在需要的地方声明@Transactional方法,通常是这样做的(或者不用自动连接lombok注解):