2016-07-22 14 views
0

Ich versuche, eine Personenentität in Neo4J Community Edition 3.0.3 mit SDN zu aktualisieren (spring-data-neo4j 4.1.2.RELEASE). Ich sehe eine Art Verhalten beim Aktualisieren einer Entität.Aktualisieren der Eigenschaften von Neo4J-Entität mit SDN

  • Ich habe eine ‚Person‘ Einheit der Namen „Person“ und rettete die gleichen in der Datenbank (Linie 8).
  • Eine Eigenschaft (fullName) der gespeicherten Entität wurde geändert, aber hat diese in der Datenbank nicht aktualisiert (Zeile 10).
  • Wurde dieselbe Person aus der Datenbank abgerufen, aber mithilfe einer findBy-Methode in eine andere Variable namens "person2" (12).
  • Die in Variable "Person" (in Zeile 10) vorgenommenen Änderungen gehen verloren.
  • Sowohl die Person als auch die person2 Variable haben die gleichen Eigenschaftswerte.

    1.Person person = new Person(); 
    2. person.setUuid(UUID.randomUUID().toString()); 
    3. person.setFullName("P1"); 
    4. person.setEmail("[email protected]"); 
    5. person.setUsername("[email protected]"); 
    6. person.setPhone("123456789"); 
    7. person.setDob(new Date()); 
    8. personService.create(person); 
    
    9. System.out.println(person); 
    //Person{id=27, username='[email protected]', fullName='P1', email='[email protected]'} 
    10. person.setFullName("P2"); 
    11. System.out.println(person); 
    //Person{id=27, username='[email protected]', fullName='P2', email='[email protected]'} 
    
    12.Person person2 = personService.findByEmail("[email protected]"); 
    13. System.out.println(person2); 
    //Person{id=27, username='[email protected]', fullName='P1', email='[email protected]'} 
    14. System.out.println(person); 
    //Person{id=27, username='[email protected]', fullName='P1', email='[email protected]'} 
    

Ist dies das Standardverhalten von Neo4j SDN?

unten sind die pom Einträge sowie die für Neo4j verwendete Konfiguration, wie sie in dem Kommentar geraten

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-neo4j</artifactId> 
     <!-- <version>4.1.2.RELEASE</version> --> 
    </dependency> 

    <dependency> 
     <groupId>org.neo4j</groupId> 
     <artifactId>neo4j-ogm-core</artifactId> 
     <version>2.0.4</version> 
    </dependency> 


public class MyNeo4jConfiguration extends Neo4jConfiguration { 
@Bean 
public org.neo4j.ogm.config.Configuration getConfiguration() { 
    org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); 
    config 
     .driverConfiguration() 
     .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver") 
     .setCredentials("neo4j", "admin") 
     .setURI("http://localhost:7474"); 
    return config; 
} 

@Bean 
public SessionFactory getSessionFactory() { 
    return new SessionFactory(getConfiguration(), "au.threeevolutions.bezzur.domain" ); 
} 
} 

Antwort

1

Dieses Verhalten in der aktuellen Version von Neo4j OGM- wurde behoben 2.0.4 Wenn Sie neu zu laden Eine Entität, die die Sitzung bereits verfolgt, die Entitätseigenschaften werden nicht überschrieben, dh die Eigenschaften im Sitzungscache werden zurückgegeben, und Ihre nicht überwachten Änderungen bleiben erhalten. Beachten Sie jedoch, dass Beziehungen und neue Knoten dem Untergraphen in der Sitzung hinzugefügt werden können, wenn diese zum Beispiel durch Laden verwandter Knoten eingezogen werden.

+0

Ich verwende spring-data-neo4j 4.1.2.RELEASE. Muss ich also zu neo4j-ogm wechseln? Und wird es viele Änderungen im Code geben, wenn ich umschalte? Es ist ein Spring-Boot-basiertes Projekt. Ich habe nur an der Frühjahrsdaten bis zum Datum gearbeitet (wie Sie vielleicht bereits von meinen früheren Posts bemerkt haben) – Soumya

+0

Keine Notwendigkeit, auf Neo4j OGM herunterzulassen. Nur sind diese Abhängigkeit in Ihrem pom: org.neo4j Neo4j-OGM-Core 2.0.4 und eine für Ihre Fahrer sehen http://neo4j.com/docs/ogm-manual/current/# _ dependencies_for_the_neo4j_ogm – Luanne

+0

Ich habe entsprechende Änderungen vorgenommen. Die Änderungen wurden in der Frage selbst vorgenommen. Jetzt hat die Eigenschaft "fullName" der beiden Variablen "person" und "person2" ihre Werte als "P2". Es scheint, dass wenn die gleichen Knoten aus der Datenbank geholt werden, die lokalen Änderungen in diesen Knoten in den geholten Knoten widergespiegelt werden. Zum Beispiel habe ich den Wert von fullName in "P2" für die Variable "person1" geändert. Wenn ich jetzt die Details der gleichen Person mit der findByEmail-Methode in die Variable "person2" geholt habe, ist der fullName dieser Variable auch "P2" und nicht "P1", obwohl ich person1 nicht persistiert habe – Soumya