JPA 和 Bean 验证的唯一约束

新手上路,请多包涵

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

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

原文由 deamon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

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

BV 规范总结如下:

附录 D. Java Persistence 2.0 集成

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

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

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

参考

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题