具有 JPA 和 Bean 验证的唯一约束

2022-09-01 03:09:00

我希望对Bean Validation有一个约束,但这不是由标准提供的。如果我使用JPA,我就不会有一个独特的验证和错误报告机制。@Unique@UniqueConstraint

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


答案 1

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

BV规范是这样总结的:

附录 D. Java 持久性 2.0 集成

问题:我们是否应该添加映射到@Column(unique=true)@Unique?

@Unique无法在 Java 级别可靠地进行测试,但可能会生成数据库唯一的约束。@Unique不是当今BV规范的一部分。

因此,虽然我同意在Bean验证异常中包装唯一(和非空)约束冲突会很好,但目前情况并非如此。

引用


答案 2

有关如何实现@Unique及其周围问题的更多信息,请参阅此处 - http://community.jboss.org/wiki/AccessingtheHibernateSessionwithinaConstraintValidator