在 Neo4j OGM 中映射而不是设置关系

Map instead of Set for relationship in Neo4j OGM

Neo4j OGM tutorial中,我看到只有Set被用于映射关系。可以使用地图吗?

考虑以下示例

假设我有一个class如下:

 @NodeEntity
    public class Person {
     @Property
       String idCardNumber;

        Map <String, Car> cars;
    }

    @NodeEntity
    public class Car{
      @Id
       String plateNumber;
        @Property
       String color;
    }

如何定义 class 人物和汽车的关系,因为它是在 class 人物中使用的地图?

这是不可能的,因为无法在数据库中存储附加信息(例如您示例中的 String)。 我认为根本不需要 Map 关系结构,因为它们总是由它们的类型或丰富的关系实体通过 @RelationshipEntity.

定义

如@meistermeier 所述,这不可能直接实现。但我使用了 hack,因为在我的情况下,我只需要能够使用 Neo4j OGM 将对象直接保存在数据库中。简而言之,我使用 set 并在持久化 class Person 的实例之前将对象放入其中。代码如下:

@NodeEntity
    public class Person {
     @Property
       String idCardNumber;

        @Transient
        Map <String, Car> cars;

        @Relationship(type = "hasCar",direction = Relationship.OUTGOING)
        Set <Car> finalCars;

        public void beforeSave(){
                 finalCars = new HashSet<>(cars.values());
         }
    }

    @NodeEntity
    public class Car{
      @Id
       String plateNumber;
        @Property
       String color;
    }

然后,就在将 Person 对象保存到数据库之前,汽车被加载到集合 finalCars 中。这可以直接在负责持久化 Person 的方法中通过在实例上调用 beforeSave() 来完成。