Spring启动JPA实体生命周期事件



我需要检查当前租户是否正在更新自己的实体并使用了@PreUpdate注释。如果我通过了完整对象repository.save()方法,我得到了必要的tenantId,但一旦我通过了DTO(由映射器映射到实体(,tenantId就为空。既然启用了@SelectBeforeUpdate,就不应该映射字段吗?@PreRemove注释运行良好,即使我只使用ID(repository.remove(ID)(,我也会得到所述属性。我也尝试过使用@PostUpdate方法(因为tenantId不可更新(,但它仍然给出null值。我可以在这些事件中执行必要的检查吗?或者是否有其他解决方案(我想保持服务层的清洁(。

@PreRemove
public void preRemove() {
//tenantId is not null
if (Boolean.FALSE.equals(Objects.equals(tenantId, ThreadLocalStorage.getTenantId())))
throw new EntityNotFoundException(id.toString(), this.getClass().getSimpleName());
}
@PreUpdate
public void preUpdate() {
//tenantId is null
if (Boolean.FALSE.equals(Objects.equals(tenantId, ThreadLocalStorage.getTenantId())))
throw new EntityNotFoundException(id.toString(), this.getClass().getSimpleName());
}

@PostUpdate侦听器中检查它。如果您无论如何都抛出异常,那么无论如何都会通过该机制中止事务。

最新更新