如何修改Spring数据JPA默认查询和删除?

时间:2019-01-30 08:55:07

标签: java spring jpa spring-data-jpa

如何修改Spring Data JPA默认查询和删除方法?

例如:

在构建环境中,每个表都有一个字段enabled

删除此数据时,字段enabledfalse

选择数据时,仅选择enabledtrue

因此,spring data jpa默认方法无法做到这一点。

如何修改?

我找到了方法

    /**
     * 自己写的删除方法
     *
     * @param aLong 删除的id
     */
    @Modifying
    @Query("UPDATE Book SET enabled = false WHERE id = :id")
    @RestResource(exported = false)
    void delete(@Param("id") Long aLong);

    /**
     * 重写删除方法
     *
     * @param entity 删除的实体
     */
    @Override
    default void delete(Book entity){
        delete(entity.getId());
    }

但是JpaRepository有更多的方法,我有更多的表。太可怕了!

你能帮我吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您不能这样做,因为Spring-data-rest并非旨在那样工作。 HTTP DELETE将始终删除资源。实际上,您想要的只是更新属性值(将设置从true启用为false)。 实际上,您无需执行任何操作即可完成您想做的事情,因为有了Spring-data-rest,您可以在任何资源上调用PATCH(或UPDATE)来更新它。 删除数据时,只需进行PATCH调用而不是DELETE调用即可将启用的布尔值设置为false。

Target

答案 1 :(得分:0)

没有符合JPA的方法。 如果您碰巧使用了Hibernate,则可以自定义用于删除和选择的查询。

有关详细信息,请参见https://vladmihalcea.com/the-best-way-to-soft-delete-with-hibernate/