如何使用JPA @Query和@Param注释执行软删除?

时间:2019-01-22 06:03:43

标签: java jpa annotations spring-data-jpa sql-update

我正在尝试使用JPA @Query Annotation更新数据库表中的现有行。我想通过将Deleted_Flag从NO更新为YES来执行软删除。

这是我的代码段:

@Modifying
@Query("UPDATE TBL_NAME SET DELETE_FLAG = 'YES' WHERE DELETE_FLAG = 'NO' 
AND FILE_NM = :FILE_NM")
public void softDelete(@Param("FILE_NM") String fileName)
{
}

我没有收到任何错误,但是数据库中的数据没有更新。

实际结果必须类似于所有现有行都必须使用DELETE_FLAG更新为YES。

2 个答案:

答案 0 :(得分:0)

在使用“更新”查询时,也许使用主键列会与其他“位置”要求一起提供帮助

答案 1 :(得分:0)

确保您使用活动事务调用存储库方法。

实际上,在我的上一个项目中,我使用以下惯用法来更新标志:

使用Hibernetish注释实体:

<h1>Pictures</h1>
<div class="images">
  <img src="https://picsum.photos/200/200?random">
  <p>Image 1</p>
</div>
<div class="images">
  <img src="https://picsum.photos/200/200?random">
  <p>Image 2</p>
</div>

<div id="my_freaking_id">
  It has been a long day, without you my friend and I will tell you all about it when I see you again!<br>I hope our friendship lasts forever!
</div>

实际更新附带一个简单的查找方法:

@Entity
@Table(name="myTable")
@Where(clause = "is_deleted = 0")
@Cacheable
public class MyTable {}