小编典典

在保留实体之前检查约束是否违反

hibernate

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

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

要么

您是否要让数据库抛出ConstraintViolationException并在UI层中适当地处理此消息。在jboss接缝框架中应在哪里执行此类检查。

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

当前,我们将Seam 2.2,Richfaces与Hibernate结合使用。


阅读 191

收藏
2020-06-20

共1个答案

小编典典

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

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

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

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

编辑

正如Shervin提到的那样,创建一个JSF验证器是一个好主意(取代上面的#1),但是您仍然应该期待最差的情况并捕获ConstraintViolationException。

2020-06-20