orientdb属性约束,如强制不在不正确的java api插入上失败

orientdb属性约束,如强制不在不正确的java api插入上失败,java,graph,orientdb,Java,Graph,Orientdb,我有一个orientdb设置,其中有一个名为MessageLog的类,其属性messageId具有约束MANADATORY且不为NULL。如果我试图从控制台插入一个带有null messageId的记录,它会引发一个异常,告诉我属性不能为null。但是,当我从JavaAPI进行简单插入时,插入的记录的属性值为null。这怎么可能呢 java代码是: import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.im

我有一个orientdb设置,其中有一个名为MessageLog的类,其属性messageId具有约束MANADATORY且不为NULL。如果我试图从控制台插入一个带有null messageId的记录,它会引发一个异常,告诉我属性不能为null。但是,当我从JavaAPI进行简单插入时,插入的记录的属性值为null。这怎么可能呢

java代码是:

import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import com.tinkerpop.blueprints.impls.orient.OrientVertexType;

public class OrientDbTrials {

public static void main(String[] args) {

    OrientGraph graph = new OrientGraph("remote:localhost/blah","root","*****");
    System.out.println("Connected to the db.");

    Vertex messageLog = graph.addVertex("class:MessageLog");

    System.out.println("Created new vertex : " + messageLog.toString());
    messageLog.setProperty("messageId", null);
    graph.commit();
    System.out.println("Successfully saved it.");

    }

}
有人能解释一下吗。

来自

每次修改图形时,如果没有运行以前的事务,则会自动启动隐式事务。通过调用shutdown()方法或显式提交()关闭图形时,事务将自动提交。要回滚更改,请调用rollback()方法。在提交或关闭图形实例之前,事务内部的更改是临时的。并发线程或外部客户端只有在事务已完全提交时才能看到更改

因为您没有定义如何处理异常,所以我认为,当出现异常时,图形正在关闭,从而提交更改。当我运行您在try-catch块中给出的代码时,我得到一个异常

OrientGraph graph = new OrientGraph("remote:localhost/blah","root","*****");
System.out.println("Connected to the db.");
try { Vertex messageLog = graph.addVertex("class:MessageLog");

      System.out.println("Created new vertex : " + messageLog.toString());
      messageLog.setProperty("messageId", null);
      graph.commit();
} catch(Exception e) {
  graph.rollback();
}
finally {
  graph.shutdown();
}
那个代码(请原谅丑陋的人)引发了这个例外

java.lang.IllegalArgumentException: Property value can not be null
因为我用graph.rollback()处理异常,所以顶点不会出现在图中

有趣的是,仅仅拥有强制属性似乎还不够,也就是说,如果您从未在一开始就用null填充字段,那么它将允许提交,而不会引发异常。我还没有研究过它,但它可能与图形实例在默认情况下是混合模式或类似的东西有关?我希望其他人知道。

谢谢你的回答!:)@用户3390629