提取导致ConstraintViolationException的字段名称

Sar*_*ram 6 hibernate hibernateexception

我怎样才能字段名引起org.hibernate.exception.ConstraintViolationException?检查唯一约束的唯一可靠方法是事务提交,因此即使我在抛出异常之前检查它也是如此.所以,我需要传达给用户的女巫场引起保存问题.
详细消息或多或少是技术性的,用户不能接受.它还取决于数据库驱动程序:( IMO 字段名称就足够了,我可以从对象中获取有问题的值.还可以准备其他信息......但字段名称.

Ang*_*gga 3

你不能得到异常和消息,因为它的原因是这样的:

 try{
        t.commit();
    }catch (ConstraintViolationException e) {
        e.getCause().getMessage();//
    }
Run Code Online (Sandbox Code Playgroud)

这将为您提供这样的结果,[SQL0407] Null values not allowed in column or variable GROUP00002.最后一个单词是您的列名称,然后您可以将其翻译为匹配您的字段(也许使用静态 HashMap)。

  • 这是我想到的唯一解决方案。但对我来说,它不是独立于实现的。对于我所知道的所有数据库来说,该消息都是不同的。我也不能相信数据库供应商将来不会改变它:( (2认同)