2016-04-02 8 views
2

Ich brauche einen neuen Knoten der Klasse A zu schaffen, die eine Beziehung mit dem Benutzerknoten hat:Spring Data Neo4j - Erstellen neuen Knoten mit einer Verbindung mit einem vorhandenen Knoten

@NodeEntity 
public class A implements Serializable { 

    /** 
    * Graph node identifier 
    */ 
    @GraphId 
    private Long nodeId; 

    /** 
    * Enity identifier 
    */ 
    private String id; 

    //... more properties ... 

    @Relationship(type = "HAS_ADVERTISER", direction = Relationship.OUTGOING) 
    private User user; 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (!(o instanceof IdentifiableEntity)) return false; 

     IdentifiableEntity entity = (IdentifiableEntity) o; 
     if (!super.equals(o)) return false; 

     if (id != null) { 
      if (!id.equals(entity.id)) return false; 
     } else { 
      if (entity.id != null) return false; 
     } 

     return true; 
    } 


} 


@NodeEntity 
public class User implements Serializable { 

    /** 
    * Graph node identifier 
    */ 
    @GraphId 
    private Long nodeId; 

    /** 
    * Enity identifier 
    */ 
    private String id; 

    //... more properties ... 


    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (!(o instanceof IdentifiableEntity)) return false; 

     IdentifiableEntity entity = (IdentifiableEntity) o; 
     if (!super.equals(o)) return false; 

     if (id != null) { 
      if (!id.equals(entity.id)) return false; 
     } else { 
      if (entity.id != null) return false; 
     } 

     return true; 
    } 

} 

Nun lassen Sie sie uns annehmen, haben folgende Daten für den neuen Knoten A:

{ 
    "id": 1, 
    "nodeId": "0001-0001", 
    "user": { 
      "id": 4, 
      "nodeId": "0002-0002", 
      "name": null, 
      "firstName": null 
      } 
} 

ich versuche, den Knoten A mit einem Verhältnis zwischen dem neuen Knoten A und dem (bereits vorhandenen) Knoten des Nutzers zu erstellen, die die „id“ haben : 4 und "nodeId": "0002-0002" (eindeutiger Knotenbezeichner), statt dessen aktualisiert der Benutzerknoten die Felder "na mich "und" firstName "mit null.

Ich bin mit dem GraphRepository Proxy, es zu schaffen:

@Repository 
public interface ARepository extends GraphRepository<A> { 


} 

Gibt es eine Möglichkeit, es ohne dieses Update zu tun, nur die Beziehung mit dem Knoten Benutzer machen?

Antwort

0

Nein, Sie müssen entweder die Entität nach ID neu laden, um alle fehlenden Werte aufzufüllen, und dann speichern oder eine benutzerdefinierte Abfrage schreiben.

+0

Vielen Dank für Ihre Antwort! –

0

Sie können es mit einem MERGE tun. Siehe

@Repository 
public interface ARepository extends GraphRepository<A> { 

    @Query("MERGE (a:A {id:aId}})-[:HAS_ADVERTISER]-(u:User {id:{userId}})" + 
      "RETURN a") 
    public A createAndGetAd(@Param("aId") String aId, 
          @Param("userId") String userId) 
    } 
Verwandte Themen