我想要一个@Unique
Bean Validation 的约束,但这不是标准提供的。如果我使用 JPA@UniqueConstraint
我不会有独特的验证和错误报告机制。
有没有办法定义@Unique
作为 Bean Validation 约束并将其与 JPA 结合起来,这样 JPA 创建一个具有唯一约束的列并检查值是否唯一?
除非你获得整个表的锁,基本上不可能使用 SQL 查询检查唯一性(任何并发事务都可以在手动检查之后但在正在进行的事务提交之前修改数据)。换句话说,不可能在 Java 级别实现有效的唯一验证,从而提供验证实现。检查唯一性的唯一可靠方法是在提交事务时。
BV 规范总结如下:
附录 D. Java Persistence 2.0 集成
问题:我们应该添加@Unique吗
会映射到@Column(unique=true)?
@Unique 无法在 Java 上进行测试
水平可靠,但可以产生
数据库唯一约束生成。
@Unique 不是 BV 规范的一部分
今天。
因此,虽然我同意将唯一(且非空)约束违规包含在 Bean 验证异常中会很好,但目前情况并非如此。
参考
- Bean Validation specification (JSR 303)
- 附录 D. Java Persistence 2.0 集成
- 关于验证和持久性约束的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)