1

我需要一些建议来给关系命名。另外,我不确定如何用弹簧数据注释我的域实体。我见过的大多数示例都是单向的,并且选择的名称非常简单。

假设以下示例:

@NodeEntity
public class Person {   
    @Indexed
    private String name;

    @RelatedTo(type="OWNS", direction=Direction.OUTGOING)
    private Set<Car> cars;
} 

关系名称似乎还可以,没问题。

现在假设我想让这种关系是双向的。以下方法有什么区别(以及优缺点)。

1) 使关系的双方direction=Direction.BOTH 并调用关系type="OWNERSHIP"?

@NodeEntity
public class Person {   
    @Indexed
    private String name;

    @RelatedTo(type="OWNERSHIP", direction=Direction.BOTH)
    private Set<Car> cars;
}

@NodeEntity
public class Car {   
    @Indexed
    private String description;

    @RelatedTo(type="OWNERSHIP", direction=Direction.BOTH)
    private Person person;
}

2) 两边都使用方向?

@NodeEntity
public class Person {   
    @Indexed
    private String name;

    @RelatedTo(type="OWNS", direction=Direction.OUTGOING)
    private Set<Car> cars;
}

@NodeEntity
public class Car {   
    @Indexed
    private String description;

    @RelatedTo(type="OWNED_BY", direction=Direction.INCOMING)
    private Person person;
}
4

1 回答 1

3

Neo4j 中不存在双向关系。每个关系都有一个开始节点和一个结束节点。也就是说,您可以选择在编写遍历时忽略该方向,有效地将关系用作双向关系。

你试图模拟的是拥有汽车的人。(person) -[:OWNS]-> (car) 意味着两件事:从人的角度来看,这种外向关系表明该人拥有汽车。从汽车的角度来看,相同(但传入)的关系意味着它是由人拥有的。

如果没有指定方向,SDN 中的@RelatedTo 注解默认使用 Direction.OUTGOING。这就是为什么您可能认为这些关系是双向的,但事实并非如此。它们默认为 OUTGOING。

所以我会像这样对你的域建模:

@NodeEntity
public class Person {   
   @Indexed
   private String name;

   @RelatedTo(type="OWNS", direction=Direction.OUTGOING) //or no direction, same thing
   private Set<Car> cars;
}

@NodeEntity
public class Car {   
   @Indexed
   private String description;

   @RelatedTo(type="OWNS", direction=Direction.INCOMING)
   private Person person;
}
于 2013-08-10T22:43:12.763 回答