在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.");
}
}
答案 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;