我不想在cayenne中更新某些列值,但我想插入它们。一旦插入行,我将永远不想更新某些列值。我如何在卡宴中做到这一点。如果它在映射文件中处于休眠状态,我们可以指定一些内容

<column name="column1" type="string" insert="true" update="false">


如何在cayenne映射文件中指定以上内容。对此,我们将给予任何帮助。

-纳伦德拉

最佳答案

在Cayenne中,您不能以声明方式进行此操作(并且我认为这不是添加的非常有用的抽象方法)。但是,您只需一点代码就可以实现相同的目的。在您的对象[1]中覆盖'validateForUpdate'以检查给定的列在当前事务中是否未被更改:

  public void validateForUpdate(ValidationResult validationResult) {
     super.validateForUpdate(validationResult);

     ObjectStore objectStore = (ObjectStore) getObjectContext().getGraphManager();
     DataRow snapshot = objectStore.getCachedSnapshot(getObjectId());
     if(!snapshot.get("COLUMNNAME").equals(getMyProperty())) {
        validationResult.addFailure(new SimpleValidationFailure(this, "Immutable property modified");
     }
  }


[1] http://cayenne.apache.org/docs/3.1/api/org/apache/cayenne/Validating.html

09-26 03:21