我需要检查当前租户是否正在更新自己的实体并使用了@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
侦听器中检查它。如果您无论如何都抛出异常,那么无论如何都会通过该机制中止事务。