我正在尝试使用SDN(spring-data-neo4j 4.1.2.RELEASE)更新Neo4J社区版3.0.3中的Person实体。我在更新实体时看到了一种行为。
现在有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" );
}
}
答案 0 :(得分:1)
此行为已在最新版本的Neo4j OGM-2.0.4中修复 如果重新加载会话已在跟踪的实体,则不会覆盖实体属性,即会返回会话高速缓存中的属性,从而保留您的未加载修改。但请注意,如果通过加载相关节点来拉入关系和新节点,则可以将它们添加到会话中的子图中。