2

Spring Data Neo4j 4 (4.0.0.RELEASE および Neo4j Community Server 2.2.5) を使用する Spring Boot アプリケーションがあります。SDN 4 の依存関係として、neo4j-ogm ライブラリ (1.1.4-SNAPSHOT) の最新のスナップショット バージョンを使用しています。関係エンティティ) 同じ 2 つのノード エンティティ クラス間の関係タイプによって区別されます。

失敗した統合テストの 2 つのノード エンティティ クラスは次のとおりです。

@NodeEntity
public class TypeD {

    @GraphId
    private Long id;

    @Relationship(type = "ONE", direction = Relationship.OUTGOING)
    private TypeE one;

    @Relationship(type = "MANY", direction = Relationship.OUTGOING)
    private Set<TypeE> many;

    private String identifier;
    ...


@NodeEntity
public class TypeE {

    @GraphId
    private Long id;

    @Relationship(type = "ONE", direction = Relationship.INCOMING)
    private Set<TypeD> firstColl;

    @Relationship(type = "MANY", direction = Relationship.INCOMING)
    private Set<TypeD> secondColl;
    ...

統合テストは、既存の ONE 関係がすでにデータストアにある 2 つのノードから開始します。

データストア コンテンツの開始

    // Find the TypeE node using its String identifier
    TypeE e = typeERepository.findByIdentifier(EEE);
    assertNotNull(e);
    assertEquals(EEE, e.getIdentifier());

    // Create a new TypeD object
    TypeD d = new TypeD();
    // and create a relationship between d and the TypeE node
    d.setOne(e);
    d.setIdentifier(TWO);
    // note that the e object is NOT added to the many collection 
    // and save d
    TypeD savedD = typeDRepository.save(d);

私は結果が

期待されるデータストア コンテンツ

しかし、それは実際には

実際のデータストアの内容

そのため、予想外に (少なくとも私にとっては)、新しいオブジェクトが作成および保存される前に存在していたノード間に新しい関係が作成されます。

複数の (EEE)<-[:ONE]-(d) 関係をデータストアに既に格納している場合、新しい TypeD オブジェクトが作成および保存されると、各 (d) は (EEE) への新しい [:MANY] 関係を取得します。

これの実際のアプリケーション シナリオの 1 つは、ユーザーの所有権と、他のアイテムとのライセンス関係です。したがって、TypeE は User になり、TypeD は所有またはライセンスされた Item になります。ユーザーは、同じタイプの複数のアイテムを所有またはライセンスすることができます。アイテムの所有者は 1 人だけですが、複数のユーザーにライセンスを付与できます。したがって、このテストの関係は、ONE = 所有者、MANY = ライセンシーとなります。

ここに間違いがありますか、それとも似たようなものを見た人はいますか?

4

0 に答える 0