首页 > 解决方案 > 我应该在哪里处理数据库查询以使用 spring data jpa 进行验证?

问题描述

我最近一直在使用带有 spring-data-jpa 的 spring boot 开发一个 API。我一直在使用带有休眠验证器的 jsr303 注释来验证我的 API 请求中的 dto,然后再将它们映射到 JPA 实体。

我还在我的 JPA 实体上使用相同的休眠验证器注释来验证将实体传递到 spring data jpa 存储库以保存它时。

这些验证中的大多数使用 spring data jpa 存储库来验证传入的值是否在数据库中的特定列表中。但是最近有人告诉我,不支持在 jpa 生命周期(验证)期间使用 EntityManager,并且遇到了错误,请参阅:Hibernate validator cause many to many relationship to not save

我收到反馈说使用这些注释来验证持久层中的实体是一个“奇怪”的想法。我的问题是,我应该在哪里验证我的实体?正如我所说,我在休息 API 层进行了验证,但我不想只是假设我在与休息层无关的代码中正确构建了一个实体。

我要尝试的一种选择是在实体上使用 JSR 注释,但在我的服务层方法中使用 @Valid 验证它们。问题是 EntityManager 无论如何都会尝试验证这些注释,我似乎无法找到一种方法让它忽略它们。

当 jsr303 注释运行良好时,我真的不想手动实现我的所有验证......

标签: javaspringspring-data-jpa

解决方案


推荐阅读