2016-07-22 4 views
0

Я пытаюсь обновить объект Person в версии 3.0 3.0 сообщества Neo4J с использованием SDN (spring-data-neo4j 4.1.2.RELEASE). Я вижу свое поведение при обновлении объекта.Обновление свойств объекта Neo4J с использованием SDN

  • Я создал объект «лицо» от имени «человека» и сохранил то же в базе данных (строка 8).
  • Изменено свойство (полное имя) сохраненного объекта, но не обновил его в базе данных (строка 10).
  • Получено одно и то же лицо из базы данных, но с помощью метода findBy в другую переменную с именем «person2» (12).
  • Изменения, внесенные в переменную «человек» (в строке 10), теряются.
  • И переменные лица и человека2 имеют те же значения свойств.

    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]'} 
    

Является ли это поведение по умолчанию Neo4j SDN?

Ниже приведены данные ПОМ, а также конфигурации, используемой для Neo4j, как сообщил в комментарии

<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" ); 
} 
} 

ответ

1

Такое поведение было зафиксировано в последней версии Neo4j OGM- 2.0.4 Если перезагрузить объект, который сеанс уже отслеживает, свойства объекта не будут перезаписаны, т. е. возвращаются свойства в кеше сеанса, сохраняя ваши измененные модификации. Обратите внимание, однако, что отношения и новые узлы могут быть добавлены к подграфу в сеансе, если они втянуты, например, путем загрузки связанных узлов.

+0

Я использую spring-data-neo4j 4.1.2.RELEASE. Так мне нужно изменить на neo4j-ogm? И будет ли он меняться в коде, если я переключусь? Его проект, основанный на весенней загрузке. Я работал только с данными весны до даты (как вы уже могли заметить из моих предыдущих сообщений) – Soumya

+0

Не нужно опускаться до NeO4j OGM. Просто включите эту зависимость в вашем ПОМ: org.neo4j Neo4j-ОГМ-ядро 2.0.4 и один для водителя см http://neo4j.com/docs/ogm-manual/current/# _ dependencies_for_the_neo4j_ogm – Luanne

+0

Я внес соответствующие изменения. Модификации были предоставлены в самом вопросе. Теперь свойство «fullName» как переменных «person», так и «person2» имеет свои значения как «P2». Кажется, что, если одни и те же узлы извлекаются из базы данных, локальные изменения этих узлов отражаются в выбранных. Например, я изменил значение fullName на «P2» для переменной «person1». Теперь, когда я извлекал детали того же человека, используя метод findByEmail, в переменную «person2», fullName этой переменной также «P2», а не «P1», хотя я не сохранял person1 – Soumya