gpt4 book ai didi

hibernate - 在持久化实体之前检查约束违规

转载 作者:行者123 更新时间:2023-12-02 19:58:20 25 4
gpt4 key购买 nike

在创建之前防止约束违规检查的最佳机制是什么?修改实体?

假设“用户”实体将“loginid”作为唯一约束,那么明智的做法是在创建或修改之前检查是否已经存在具有此登录 ID 名称的用户条目。

或者

您能让数据库抛出 ConstraintViolationException 并在 UI 层适当处理此消息吗? jboss seam 框架中应该在哪里执行此类检查。

注意:目前,seam-gen 代码上没有强制执行此类检查。

我们目前使用 Seam 2.2、Richfaces 和 Hibernate。

最佳答案

即使您在保留用户对象之前检查代码中的条件,在您检查和保留新用户之间,也始终有可能有人创建重复的登录 ID。

但是,如果您进行显式检查,则可以更轻松地在 UI 中显示适当的错误消息。如果表上有多个约束,捕获 ConstraintViolationException 将不允许您轻松确定违反了哪个约束。

所以我会两者都做。假设您从 Seam 的 EntityHome 进行扩展:

  1. 在 persist() 方法中运行查询以确保登录 ID 是唯一的。如果不是,则将错误消息添加到相应的控件并返回 null。
  2. 包装对 super.persist() 的调用并捕获 ConstraintViolationException,显示通用的重复错误消息

编辑

正如 Shervin 提到的,创建一个 JSF validator 是一个好主意(取代)上面的 #1,但您仍然应该做好最坏的打算并捕获 ConstraintViolationException。

关于hibernate - 在持久化实体之前检查约束违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com