检查ConstraintViolationException的原因

时间:2014-02-27 19:29:16

标签: java neo4j

在neo4j 2.0中,如果您尝试对已经有约束的索引设置约束,则会抛出由ConstraintViolationException

引起的AlreadyConstrainedException

我的问题是:如何检查ConstraintViolationException是否由ALreadyConstrainedException引起,或者是否是其他内容?我花了几个小时谷歌搜索和尝试不同的东西。下面的代码有效,但感觉很乱,所以我想知道是否有更好的方法来做到这一点。

catch(ConstraintViolationException e){
        if(e.getCause().getClass().getCanonicalName().equals("org.neo4j.kernel.api.exceptions.schema.AlreadyConstrainedException")){
            System.out.println("Index Already Constrained.");
        }

    }

2 个答案:

答案 0 :(得分:2)

我认为您的解决方案很接近,但有点难以理解。以下略有改进将更容易理解。我假设你的模块将导入AlreadyConstrainedException。

catch(ConstraintViolationException e) {
    if (e.getCause() instanceof AlreadyConstrainedException){
       System.out.println("Index Already Constrained.");
    }
}

答案 1 :(得分:2)

您还可以使用此调用预先检查是否存在约束。

for (ConstraintDefintion def : db.schema().getConstraints( label )) {
     if (def.isConstraintType(ConstraintType.UNIQUENESS) && 
         asCollection(def.getPropertyKeys()).contains(key)) 
           return true;
}
return false;