0

cayenneの一部の列値を更新したくないのですが、それらを挿入したいと思います。行を挿入すると、一部の列の値を更新したくなくなります。カイエンでこれを行うにはどうすればよいですか。マッピングファイルで休止状態の場合は、何かを指定できます

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

カイエンマッピングファイルで上記のものを指定するにはどうすればよいですか。これに関するどんな助けも本当にありがたいです。

-ナレンドラ

4

1 に答える 1

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

于 2012-11-19T11:36:13.237 に答える