Neo4j OGM中的地图而不是设置关系

时间:2019-05-07 10:17:39

标签: neo4j neo4j-ogm

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

考虑以下示例

假设我有一个如下课程:

 @NodeEntity
    public class Person {
     @Property
       String idCardNumber;

        Map <String, Car> cars;
    }

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

给定Person类和Car类中使用的地图,该如何从Person类和Car类中定义关系?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

@NodeEntity     公共类人{      @属性        字符串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()的方法中完成此操作。