2

概要: を使用SDN4して、10 個のオブジェクトを保持しています。その半分は同じ内容で、リンク先の ID のみが異なります。リンク ID は として設定され@Transientます。それでも、2 つのリンクを持つ 1 つのオブジェクトではなく、同じコンテンツを持つ 2 つのオブジェクトが作成されます。この動作を回避するにはどうすればよいですか?

詳細: 2 つのドメイン オブジェクトが定義されており、CSV 経由の情報ソースは次のようになります。

ドメイン オブジェクト CSV:

key,name
1,test1
3,test3

ポジョ A:

@Transient
private int key;    
private String name;

@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
private Set<B> bObject = new HashSet<>();

public void setName(String name) {
    this.name = name;
}

@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
public void hasCertification(B b) {
    bObject.add(b);
    b.getA().add(this);
}

ドメイン オブジェクト B:

foreignKey,name,value
1,ISO9001,TRUE
1,ISO14001,TRUE
3,ISO9001,TRUE
3,ISO14001,TRUE

ポジョ B:

@Transient
private int foreignKey;
private String name;
private String value;

@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
private Set<A> a = new HashSet<>();

public void setName(String name) {
    this.name = name;
}

public void setValue(String value) {
    this.value = value;
}

@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
public Set<A> getA() {
    return a;
}

これらの CSV ファイルは解析され、それぞれの POJO (A および B) 内で SDN4 に読み込まれます。

次に、これらのオブジェクトをループして、関係を追加します。

private void aHasCertification(
        Optional<List<B>> b,
        Optional<List<A>> a) {
    for (A aObj : a()) {
        for (B bObj : b()) {
            if(bObj.getForeignKey() == aObj.getKey()) {
                aObj.hasCertification(bObj);
            }
        }
    }
}

次に、ルート リポジトリである repositoryA を使用して、ロードされたオブジェクトを保存します。repositoryA.save(domainObjectA);

データベースにクエリを実行すると、match n return n;

A オブジェクトごとに 2 つとISO90012 つのISO14001オブジェクトがあります。私が期待するものの代わりに、それぞれに と への 2 つのリンクがA:1ありA:3ます。

4

1 に答える 1

2

私があなたを正しく理解していれば、代わりに

ここに画像の説明を入力

あなたが期待している

ここに画像の説明を入力?

OGM には、同じ「名前」を持つ B の 2 つのインスタンスが同じノードであることを知る方法がありません。あなたがする必要があるのは、プロパティごとに B ノードをロードし、存在する場合はそれを使用して A に関連付け、存在しない場合は作成することです。CSV 行へのほぼ 1:1 のマッピングでオブジェクトをモデル化する代わりに、CSV データをもう少し処理する必要があると思います。

于 2015-10-02T16:50:23.830 に答える