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

使用spring-data-neo4j,我想使用@RelationshipEntity(type =“OWNS”)创建两个类,将Person类链接到Pet和Car.

@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;
}

这样可以正确保存到图形数据库,没有任何问题,因为我可以查询实际的节点和关系并查看它们的类型等.

但是当我尝试使用@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

我尝试打印我的人时得到的结果(我的toString()已被省略,但它只是为每个字段调用toString())是这样的:

Person [nodeId=1,name=Nick,pets=[Car [nodeId=3,name=Thunderbird]],cars=[Car [nodeId=3,name=Thunderbird]]]

有谁知道如果可以做到这一点,应该做什么,只是一个错误或缺少的功能

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

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

如果它是一个bug或不是,我不能告诉…但对于数据库:只有节点和关系.两者都没有输入,所以neo4j对你的’Pet’或’Car’-Class一无所知. Spring数据neo4j通过索引每个类型的所有节点并设置type-attribute,或使用特定的图形布局(带子引用)来处理这个问题.即使你想要获取具有遍历描述的人的所有宠物,你也会有更多的代码要编写,因为名称为’OWNS’的传出关系包含两种类型的对象.

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

PS:有可能,并非一切都是100%准确.我不太详细了解springdataneo4j,但这是我到目前为止所知道的.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...