如何更改或删除 spring data neo4j 中对象关系的目标?
How to change or remove target of object relationship in spring data neo4j?
在 spring 数据 neo4j 中,我有简单的一对多关系:(:User)-[:EMPLOYEE_OF]->(:Company)
。用户只能是一家公司的员工。这是我的实体:
class User(@Relationship(type = "EMPLOYEE_OF") var company: Company? = null, /* ids etc */)
class Company(/* ids etc */)
当我想更改该关系的目标或删除它时,neo4j 不断添加新关系而不是替换它。
val user = userRepository.findByName("user1")
val company = companyRepository.findByName("company1")
user.company = company
userRepository.save(user)
// 2nd case
user.company = null
userRepository.save(user)
在这两种情况下,关系只会被添加,而不会被删除。
有正确的方法吗?
您必须将 load
/ find
和 save
放入交易中。在 Spring 项目中执行此操作的最佳方法是将逻辑提取到应用程序的服务层方法中并将其标记为 @Transactional
。
在此事务中,Spring Data Neo4j / Neo4j-OGM 可以跟踪节点上发生的更改并更改或删除关系。
在 spring 数据 neo4j 中,我有简单的一对多关系:(:User)-[:EMPLOYEE_OF]->(:Company)
。用户只能是一家公司的员工。这是我的实体:
class User(@Relationship(type = "EMPLOYEE_OF") var company: Company? = null, /* ids etc */)
class Company(/* ids etc */)
当我想更改该关系的目标或删除它时,neo4j 不断添加新关系而不是替换它。
val user = userRepository.findByName("user1")
val company = companyRepository.findByName("company1")
user.company = company
userRepository.save(user)
// 2nd case
user.company = null
userRepository.save(user)
在这两种情况下,关系只会被添加,而不会被删除。 有正确的方法吗?
您必须将 load
/ find
和 save
放入交易中。在 Spring 项目中执行此操作的最佳方法是将逻辑提取到应用程序的服务层方法中并将其标记为 @Transactional
。
在此事务中,Spring Data Neo4j / Neo4j-OGM 可以跟踪节点上发生的更改并更改或删除关系。