5
回答
Spring Data JPA的deleteByXXXX,delete语句执行的疑问
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   


@Transactional
    List<Coupon> deleteByCode(String code);


Spring Data JPA的deleteByXXXX,是先select,在整个Transaction完了之后才执行delete。

我的需求是,删除数据后,再insert新的数据,并且数据是有唯一性约束的。

那么问题来了:

1、因为增删的数据太多,我不想要select那么多再delete

2、如果按照上面的方法,deleteBy之后,立马save新的,会造成唯一性冲突,因为jpa是在整个事务完了之后再执行delete语句的。

针对这个问题,需要改成:


@Transactional
    @Modifying
    @Query("delete from Coupon where code = :code")
    List<Coupon> deleteByCode(@Param("code") String code);

此时才立即执行delete语句。

但是,这么做我觉得有点太多余了,明明都用上JPA了,明明是最简单的CRUD,我却还要费时间去写jpql。。。

求大神解释一下,为什么Spring JPA要这么做吗?

举报
zoemak
发帖于2年前 5回/6K+阅
顶部