是否可以使用JPA @Query注释来进行Spring Boot Audit用户? 例如,我有下一个存储库:
@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {
@Modifying
@Query(value = "update Item i set statusId = :statusId WHERE i.id = :id")
void updateById(@Param("id") Long id, @Param("statusId") Long statusId);
}
但是当我在服务中使用它时,它不会更新数据库中的update_date列:
@Autowired
private ItemRepository itemRepository;
@Transactional
public void updateItemStatus(Long itemId, Long statusId) {
//Case 1: This is working, update_date column is updated
Item item = itemRepository.findById(itemId).orElseThrow(() -> new ResourceNotFoundException("Item", "id", itemId));
item.setStatusId(statusId);
itemRepository.save(item);
//Case 2: This is not working
itemRepository.updateById(itemId, statusId);
}
因此,我可以将Audit与@Query注释一起使用吗?
谢谢。
答案 0 :(得分:0)
审核基于JPA生命周期事件。只有直接操纵实例(持久,合并和删除)的方法才会触发此类事件。
执行查询(进行修改或其他操作)不会触发任何事件,因此不会导致审核发生。
答案 1 :(得分:0)
您遇到语法问题
可以使用
@Query(value = "update Item i set i.statusId = :statusId WHERE i.id = :id")
或
@Query(value = "update Item set statusId = :statusId WHERE id = :id")