gpt4 book ai didi

spring - 具有相同类型的多个关系类

转载 作者:行者123 更新时间:2023-12-04 15:35:47 27 4
gpt4 key购买 nike

使用 spring-data-neo4j,我想使用 @RelationshipEntity(type="OWNS") 创建两个类链接 Person类到两个 PetCar .

@RelationshipEntity(type="OWNS")
public class OwnsCar {
@Indexed
private String name;

@StartNode
private Person person;

@EndNode
private Car car;
}

@RelationshipEntity(type="OWNS")
public class OwnsPet {
@Indexed
private String name;

@EndNode
private Person person;

@StartNode
private Pet pet;
}

这正确地保存到图形数据库没有问题,因为我可以查询实际 NodeRelationship看看他们 类型 , 等等。

但是当我尝试使用 @RelatedTo(type="OWNS", elementClass=Pet.class) 时我要么得到一个类转换异常,要么在使用延迟初始化时得到不正确的结果。
@NodeEntity
public class Person {
@Indexed
private String name;

@RelatedTo(type="OWNS", direction=Direction.OUTGOING, elementClass=Pet.class)
private Set<Pet> pets;

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

当我尝试打印我们的人时得到的结果(我的 toString() 已被省略,但它只是为每个字段调用了 toString())是这样的:
Person [nodeId=1, name=Nick, pets=[Car [nodeId=3, name=Thunderbird]], cars=[Car [nodeId=3, name=Thunderbird]]]

有谁知道这是否可以完成,应该完成,只是一个错误或缺少的功能?

最佳答案

问题似乎是,注释导致 springDataNeo4j 优先考虑关系名称。我在我创建的另一个样本上尝试了同样的方法。如果两个注释都包含type="OWNS"它混合了两个“对象”。当我省略这些信息而只使用方向和类型时,它对我有用。

不幸的是,如果您使用另一个 @RelatedTo 注释和更多与另一个注释相关的宠物或汽车,这将导致问题。由于“OWNS”和与宠物类型的任何其他关系之间没有区别,因此该集合返回所有相关的宠物(例如:peter ->(HATES-Relationsip)->dogs)。

如果它是一个错误,我不知道......但对于数据库:只有节点和关系。两者都没有键入,因此 neo4j 对您的“宠物”或“汽车”类一无所知。 Spring data neo4j 处理这个问题,要么通过索引每种类型的所有节点并设置类型属性,要么使用特定的图形布局(带有子引用)。即使您想通过遍历描述获取一个人的所有宠物,您也需要编写更多代码,因为名称为“OWNS”的传出关系包含两种类型的对象。

我建议使用两个不同的名称。稍后编写自定义遍历/查询会更容易,而且可能会更快,因为不需要类类型比较。有什么理由,为什么你需要这些特定的名字?

PS:有可能,并非一切都是 100% 准确的。我不知道 springdataneo4j 的细节,但这就是我到目前为止所想到的。

关于spring - 具有相同类型的多个关系类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com