我想在Bean验证中加入@Unique约束,但这不是标准提供的约束。如果我使用JPA的@UniqueConstraint,那么我将没有独特的验证和错误报告机制。

有没有一种方法可以将@Unique定义为Bean验证约束并将其与JPA组合,以使JPA创建具有唯一约束的列并检查值是否唯一?

最佳答案

除非您获得整个表的锁,否则基本上不可能使用SQL查询来检查唯一性(任何并发事务都可以在手动检查之后但在提交正在进行的事务之前修改数据)。换句话说,不可能在Java级别上实现有效的唯一验证,从而无法提供验证实现。唯一性检查的唯一可靠方法是在提交事务时。

BV规范总结如下:



因此,尽管我同意在Bean验证异常中包含唯一(且非null)约束违例会很好,但目前并非如此。

引用文献

  • Bean验证规范(JSR 303)
  • Appendix D. Java Persistence 2.0 integration
  • Question about validation and persistence constraints
  • 10-07 19:49
    查看更多