例: ■ クラス A のオブジェクト a が、オブジェクト b、c、および d と関連しています。
私が行った場合:
SelectQuery query = new SelectQuery(A.class);
query.addPrefetch("b").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
query.addPrefetch("c").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
List<?> res = context.performQuery(query);
じゃあ後で:
SelectQuery query = new SelectQuery(A.class);
query.addPrefetch("d").setSemantics(PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
List<?> res = context.performQuery(query);
a から b および c への関係は無効になります (DataRowUtils の 115 行目を参照)。
Cayenne 3.0.2 を使用していますが、動作はバージョン 3.1 と 3.2M1 で同じようです。
この問題を回避する方法はありますか?
私の考えは、この関数でクラス A の CayenneDataObject をオーバーライドすることです。
public void writePropertyDirectly(String propName, Object val) {
if(propName.equals("b") || propName.equals("c")) {
if(val instanceof Fault && readPropertyDirectly(propName) != null) {
return;
}
}
super.writePropertyDirectly(propName, val);
}
それは悪い考えですか?うまくいくようです。
ロードしたら、データベースから b と c をまったく更新したくありません。
ありがとう