使用 SDN 更新 Neo4J 实体的属性
Updating properties of Neo4J Entity using SDN
我正在尝试使用 SDN (spring-data-neo4j 4.1.2.RELEASE) 在 Neo4J 社区版 3.0.3 中更新一个 Person 实体。我在更新实体时看到了一种行为。
- 我创建了一个名为 "person" 的 'Person' 实体并保存了相同的名称
在数据库中(第 8 行)。
- 更改了已保存实体的 属性 (fullName) 但是
没有在数据库中更新它(第 10 行)。
- 从数据库中检索了同一个人,但使用 findBy 方法进入另一个名为 "person2" line(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" );
}
}
此行为已在最新版本的 Neo4j OGM- 2.0.4 中修复
如果您重新加载会话已经跟踪的实体,实体属性将不会被覆盖,即返回会话缓存中的属性,保留您未持久化的修改。但是请注意,如果通过加载相关节点拉入这些关系和新节点,则可以将它们添加到会话中的子图中。
我正在尝试使用 SDN (spring-data-neo4j 4.1.2.RELEASE) 在 Neo4J 社区版 3.0.3 中更新一个 Person 实体。我在更新实体时看到了一种行为。
- 我创建了一个名为 "person" 的 'Person' 实体并保存了相同的名称 在数据库中(第 8 行)。
- 更改了已保存实体的 属性 (fullName) 但是 没有在数据库中更新它(第 10 行)。
- 从数据库中检索了同一个人,但使用 findBy 方法进入另一个名为 "person2" line(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" );
}
}
此行为已在最新版本的 Neo4j OGM- 2.0.4 中修复 如果您重新加载会话已经跟踪的实体,实体属性将不会被覆盖,即返回会话缓存中的属性,保留您未持久化的修改。但是请注意,如果通过加载相关节点拉入这些关系和新节点,则可以将它们添加到会话中的子图中。