【发布时间】:2020-02-05 22:54:15
【问题描述】:
我需要实现 JPA 软删除存储库并同时支持多个列的 JPA 审计。 目前,我已经通过 EL 和 @Query+@Modifying 注解实现了 Soft Delete 存储库:
@Override
@Modifying
@Query("update #{#entityName} e set e.active = false where e.id = ?1")
void deleteById(UUID id);
@Override
default void delete(T entity)
{
deleteById(entity.getId());
}
@Override
@Modifying
@Query("update #{#entityName} e set e.active = false where e.id in ?1")
void deleteAll(Iterable<? extends T> iterable);
@Override
@Modifying
@Query("update #{#entityName} e set e.active = false")
void deleteAll();
但是对于这样的实现,审计列不会更新,因为如果我理解正确,@Query 注释不会触发任何生命周期回调方法。
实体级别的@Where 注释不是一个选项,因为需要有可能查询软删除的实体。
您能否提供任何其他可能的解决方案?
【问题讨论】:
-
您从哪里读到/得知@Query 不会触发 LC 回调?
-
好吧,我自己试过了,在上述删除方法的情况下,JPA
AuditingEntityListener和我的自定义审计侦听器都没有被调用(@PreUpdate方法)。我还在 StackOverflow 上发现了这个问题:stackoverflow.com/questions/56823730/…
标签: java spring jpa spring-data-jpa