やあ、
私はEclipseLink APIを使用して動的エンティティを作成し、データベース テーブルに格納されたグラフを表しています。リンクは、リンク ID 列、開始ノード ID 列、終了ノード ID 列、およびその他のユーザー定義列を含む独自のテーブルに格納されます。ノードには独自のテーブルがあり、ノード ID と他のユーザー定義の列が格納されます。
リンク テーブルからノード テーブルへのマッピングを行うとき、API を使用してこれを行っています。
OneToOneMapping startNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping("startNode", dynamicNodeTypeBuilder.getType(), "NODE_ID");
OneToOneMapping endNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping("endNode", dynamicNodeTypeBuilder.getType(), "NODE_ID");
前のコードを実行すると、スタック トレースに次のメッセージが表示されます。
Local Exception Stack: Exception [EclipseLink-48] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Multiple writable mappings exist for the field [TEST_NETWORK_LINK.NODE_ID]. Only one may be defined as writable, all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.OneToOneMapping[startNodeId]
この例外は、同じエンティティの 2 つのフィールド (startNode と endNode) を別のテーブル/エンティティの同じ列/フィールドにマッピングしているため、スローされます。
このマッピングの問題を解決するにはどうすればよいか知っていますか? 別の戦略を提案していただけますか?テーブル構造を変更することはできず、マッピングの 1 つを「読み取り専用」にしたくありませんが、動的マッピングは自由に変更できます。
ありがとうございました!