Spring Boot JPA:@Modifying @Query 没有效果

Posted

技术标签:

【中文标题】Spring Boot JPA:@Modifying @Query 没有效果【英文标题】:Spring Boot JPA: @Modifying @Query has no effect 【发布时间】:2018-12-25 15:47:22 【问题描述】:

我试图通过执行一个请求而不是更新每个实体来提高性能。 sql 看起来正确,并且执行了对该方法的调用,但我在休眠日志中没有看到执行“更新”。

@Modifying
@Query("UPDATE Order x SET x.reservedByClient = :value WHERE x.tourId = :id")
public void updateReservationStatus(@Param("value") Boolean value, @Param("id") Long id);

任何提示在哪里看?

【问题讨论】:

阿尼施瓦茨福格尔。就像 Dvorog 提供的解决方案一样。应添加注释“@Transactional”。并且您可以尝试根据异常日志自行解决问题,在这种情况下,我敢打赌您已经收到了诸如执行更新/删除查询之类的日志;嵌套异常是 javax.persistence.TransactionRequiredException: Executing an update/delete query", 【参考方案1】:

修改查询应包含在事务中。尝试将@Transactional 添加到查询中。

@Modifying
@Query("UPDATE Order x SET x.reservedByClient = :value WHERE x.tourId = :id")
@Transactional
public void updateReservationStatus(@Param("value") Boolean value, @Param("id") Long id);

【讨论】:

@Transactional 将用于服务层。我们可以在存储库级别使用吗?如果我错了,请纠正我。 @Transactional 可以在两个层(服务和存储库)中使用。这取决于你想做什么。

以上是关于Spring Boot JPA:@Modifying @Query 没有效果的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例

[Spring Boot] Adding JPA and Spring Data JPA

spring-data-jpa 和 spring-boot-starter-data-jpa 的区别

spring boot jpa

Spring Boot 整合Spring Data JPA

Spring Boot中使用Spring Data JPA示例