除非获得整个表的锁
,否则基本上不可能使用SQL查询来检查唯一性(任何并发事务都可以在手动检查之后但在提交正在进行的事务之前修改数据)。换句话说,不可能在Java级别实现有效的唯一验证,从而无法提供验证实现。唯一性检查的唯一可靠方法是在提交事务时。
BV规范总结如下:
[附录D. Java Persistence
2.0集成](http://people.redhat.com/~ebernard/validation/#appendix-jpa)
问题:我们应该添加将映射到@Column(unique = true)的@Unique吗?
@Unique无法在Java级别上可靠地测试,但是可以生成数据库唯一约束生成。@Unique现在不属于BV规范。
因此,尽管我同意在Bean Validation异常中包含唯一(且非null)约束违例会很好,但目前并非如此。
参考文献
- Bean验证规范(JSR 303)
- 附录D. Java Persistence 2.0集成
- 有关验证和持久性约束的问题



