处理违反唯一约束异常

Jmix 框架中,可以自定义 异常处理器 展示的违反数据库约束的异常消息。

自定义的消息需要在 消息包 中设置,消息键值与需要以 databaseUniqueConstraintViolation 作为前缀,并拼接数据库中唯一索引的名称全大写。示例:

databaseUniqueConstraintViolation.UC_UIEX1_CUSTOMER_EMAIL=A customer with \
  the same email already exists

这样,默认的通知消息如下:

with default exception message

在添加了自定义消息后,可以看到下面的消息通知:

with custom exception message

检测违反数据库约束错误是通过 UniqueConstraintViolationHandler 类完成,该类通过在责任链中所有异常的消息中搜索特殊标记字符串来确定异常类型。

当然,也可以完全替换标准的处理器,将自定义的处理器优先级调高,例如,@Order(JmixOrder.HIGHEST_PRECEDENCE - 10)