別のオブジェクト (グラフ ノードでもあります) と 1 対多の関係を持つオブジェクト (グラフ ノード) があります。最初のオブジェクトを永続化するときは、依存オブジェクトを永続化し、適切な関係も作成する必要があります。
これは機能しますが、この方法で作成される関係は Spring Data によって自動生成され、タイプのみが含まれます。以前に定義した RelationshipEntity クラスのインスタンスは作成されず、使用するクラスを指定する方法がありません。また、Spring Data が保持する LocationHasMany インデックスにも含まれません。
ここに私のクラス定義があります:
@NodeEntity
public class LocationNode {
private String name;
@GraphId
private Long id;
@RelatedTo(type="HAS_MANY", elementClass=CategoryNode.class, enforceTargetType=true)
private Set<CategoryNode> categories = new HashSet<CategoryNode>();
}
@NodeEntity
public class CategoryNode {
private String name;
@GraphId
private Long id;
}
@RelationshipEntity(type="HAS_MANY")
public class LocationHasMany {
@GraphId
private Long nodeId;
@StartNode
private LocationNode location;
@EndNode
private CategoryNode category;
}
Spring Data に固執すると、「HAS_MANY」と呼ばれる関係に加えて、場所ノードとカテゴリ ノードが生成されます。しかし、それは私が自分で関係を維持した場合と同じではありません。__TYPE__
Spring Data 永続オブジェクトを示す内部フィールドはありません。
LocationNode オブジェクトでは、次のようなことができます。
@NodeEntity
public class LocationNode {
@RelatedToVia(type="HAS_MANY", elementClass=LocationHasMany.class)
private Set<LocationHasMany> categories;
}
しかし、ある種のグラフレイヤーを使用して永続化されている LocationNode オブジェクトに不要な詳細が追加されているように感じます。注釈 @RelatedTo には、関係の作成中に使用する必要がある特定の RelationshipEntity クラスを指定する機能が必要なようです。また、このシナリオでは、LocationNode を永続化する前に、すべての CategoryNodes が永続化されていることも確認する必要があります。そうしないと、関係の作成でエラーがスローされます。(まだ手動の依存関係の処理がたくさんあります)
以前にこの問題に遭遇して解決した人はいますか?
私の最後の解決策は、カスタムのリポジトリ実装を作成し、そのメソッドですべての関係の作成/オブジェクトの永続化を処理することです。( saveLocationWithDependencies(LocationNode location) ) ただし、グラフノードがネストされているすべてのオブジェクトに対してこれを行う必要はありません。これは、維持する必要のある大量の余分なコードです。