【问题标题】:Map instead of Set for relationship in Neo4j OGM在 Neo4j OGM 中映射而不是设置关系
【发布时间】:2019-05-07 10:17:38
【问题描述】:

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 类中使用的映射?

【问题讨论】:

    标签: neo4j neo4j-ogm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如@meistermeier 所提到的,这是不可能的。但是我使用 hack,因为在我的情况下,我只需要能够使用 Neo4j OGM 将对象直接保存在数据库中。简而言之,我使用set 并将对象放入其中,然后再持久化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 中。这可以通过在实例上调用 beforeSave() 直接在负责持久化 Person 的方法中完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-12
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 2016-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多