当我将 findById 与 JPA 一起使用时,我可以将 readOnly 设置为 false吗

问题描述 投票:0回答:2

我在设置数据库复制时修改数据时遇到问题

在数据库复制之前,我使用

repository.findById()
获取要修改的数据,然后修改数据。 但我意识到
repository.findById()
@Transactional(readOnly = true)
中设置了
SimpleJpaRepository.java
,这样即使我在服务中使用@Transactional或
repository.save()

我也无法修改数据

除了在存储库中为 findById 创建自定义方法之外,还有其他方法可以强制

findById()
通过写入连接进行连接吗?

+++) 我解决了我的问题!我想使用脏检查来修改数据,我意识到我关于 EntityManagerFactory 的设置有问题,我用 spring.io 中的文档修复了它(https://docs.spring.io/spring-data/jpa/docs /current-SNAPSHOT/reference/html/#reference)我多次尝试与许多其他开发人员发帖,但他们对我不起作用,但它确实有效。谢谢你给我答案😁

java spring-boot jpa database-replication
2个回答
0
投票
参考这个,


https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions 第 5.7.1 节。交易查询方法更具体
上面说@Modifying注解可以用来覆盖事务配置

通常您将使用设置为 true 的 readOnly 标志,因为大多数查询方法都是读取方法。与此相反,deleteInactiveUsers() 使用 @Modifying 注释并覆盖事务配置。因此,该方法将在 readOnly 标志设置为 false 的情况下执行。


0
投票
您不需要更改该标志!

    查找数据
  1. 编辑数据
  2. 使用@Modifying调用JPArepository.save(newData)方法将编辑后的数据保存到DB中
I.E.

@交易
@修改
@Query(value = "更新用户设置点数 = 点数 + ?1 WHERE id = ?2", nativeQuery = true)
intincreasePoints(intpoints,Longid);

© www.soinside.com 2019 - 2024. All rights reserved.