防止Cayenne更新某些列值

时间:2012-11-19 10:52:59

标签: java database hibernate orm apache-cayenne

我不想更新cayenne中的某些列值,但我想插入它们。插入行后,我永远不会想要更新某些列值。我怎么能在卡宴做到这一点。如果它在映射文件中是休眠的,我们可以指定一些东西

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

如何在cayenne映射文件中指定上面的一个。对此的任何帮助都非常感谢。

-Narendra

1 个答案:

答案 0 :(得分:2)

在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