在 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()
来完成。
在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()
来完成。