我想对 Bean Validation 进行 @Unique
约束,但这不是标准提供的。如果我使用 JPA 的 @UniqueConstraint
我就不会有独特的验证和错误报告机制。
有没有办法将 @Unique
定义为 Bean 验证约束并将其与 JPA 结合,以便 JPA 创建一个具有唯一约束的列并检查值是否唯一?
原文由 deamon 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想对 Bean Validation 进行 @Unique
约束,但这不是标准提供的。如果我使用 JPA 的 @UniqueConstraint
我就不会有独特的验证和错误报告机制。
有没有办法将 @Unique
定义为 Bean 验证约束并将其与 JPA 结合,以便 JPA 创建一个具有唯一约束的列并检查值是否唯一?
原文由 deamon 发布,翻译遵循 CC BY-SA 4.0 许可协议
有关如何实现 @Unique 及其周围问题的更多信息,请参见此处 - http://community.jboss.org/wiki/AccessingtheHibernateSessionwithinaConstraintValidator
原文由 Hardy 发布,翻译遵循 CC BY-SA 2.5 许可协议
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
除非你获得了整个表的锁,否则基本上不可能使用 SQL 查询来检查唯一性(任何并发事务都可以在手动检查之后但在正在进行的事务提交之前修改数据)。换句话说,不可能在 Java 级别实现有效的唯一验证,因此无法提供验证实现。检查唯一性的唯一可靠方法是在提交事务时。
BV 规范总结如下:
因此,虽然我同意在 Bean 验证异常中包含唯一(且非空)约束违规会很好,但目前情况并非如此。
参考