Neo4j:自动删除关系

时间:2017-01-31 06:05:28

标签: neo4j spring-data-neo4j neo4j-bolt

我使用弹簧数据neo4j版本4.1.2与螺栓驱动程序2.0.6。我正面临着自动破坏实体之间关系的问题。

我有一个名为组织的域名,组织属于许多实体,但我提的很少。

组织架构

    public class Organization {

      private String formalName;
      private String shortName;

    @Relationship(type = COUNTRY)
        private Country country;

        @Relationship(type = HAS_GROUP)
        private List<Group> groupList = new ArrayList<>();
    }

国家/地区架构

public class Country {

@Relationship(type = HAS_HOLIDAY)
    private List< CountryHolidayCalender> countryHolidayCalenderList;

}

当我更新组织时,它打破了所有国家的关系,如休息国家 - 假日关系等

组织更新代码

Organization unit = organizationGraphRepository.findOne(unitId);
 unit.setFormalName(organizationGeneral.getFormalName());
 unit.setShortName(organizationGeneral.getShortName());
 organizationGraphRepository.save(unit);

我无法找到,我做错了什么。请帮助我,我们目前无法承受这种错误。

由于

1 个答案:

答案 0 :(得分:0)

加载实体的默认深度为1.这意味着findOne(id)仅返回给定实体+其直接连接实体。 在您的情况organization --> country --> CountryHolidayCalender中,只会加载组织和相关国家/地区。

这可能就是为什么你没有看到附加的节点。

save跟踪对象状态,检测更改并优化更新。 对于findsave之间没有变化的对象/属性,不会有数据库更新。

因此,只要您不触及@Relationship带注释的属性,就可以安全地保存,即使未加载它们也不会被修改。

关于您之前的评论,SDN中没有用于动态深度检索的延迟加载(已存在,已弃用)。所以,是的,你必须自己管理深度。 如果您的数据量不是太大,您可能希望一次加载所有内容(使用find(id, -1))。 另一种选择可能是按需加载,手动查询丢失的图形。

您可能对this ticket感兴趣,以便更好地控制实体加载。