使用SDN更新Neo4J实体的属性

时间:2016-07-22 07:04:28

标签: neo4j spring-data-neo4j-4 neo4j-ogm

我正在尝试使用SDN(spring-data-neo4j 4.1.2.RELEASE)更新Neo4J社区版3.0.3中的Person实体。我在更新实体时看到了一种行为。

  • 我创造了一个人物'名称的实体" person"并保存相同 在数据库中(第8行)。
  • 更改了已保存实体的属性(fullName)但是 没有在数据库中更新它(第10行)。
  • 从数据库中检索同一个人,但是将findBy方法用于另一个名为" person2"的变量中。线(12)。
  • 变量" person" (第10行)丢失了。
  • 现在有person和person2变量 具有相同的属性值。

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

这是Neo4J SDN的默认行为吗?

下面给出了pom条目以及评论中建议的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 个答案:

答案 0 :(得分:1)

此行为已在最新版本的Neo4j OGM-2.0.4中修复 如果重新加载会话已在跟踪的实体,则不会覆盖实体属性,即会返回会话高速缓存中的属性,从而保留您的未加载修改。但请注意,如果通过加载相关节点来拉入关系和新节点,则可以将它们添加到会话中的子图中。