使用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]]]
type =“OWNS”它混合了两个’对象’.当我省略这些信息,只使用方向和类型时,它对我有用.
不幸的是,如果您使用另一个与另一个注释相关的宠物或汽车的@RelatedTo注释,这将导致问题.由于“OWNS”与Pet-Type的任何其他关系之间没有区别,该集合返回所有相关宠物(例如:peter – >(HATES-Relationsip) – > dogs).
如果它是一个bug或不是,我不能告诉…但对于数据库:只有节点和关系.两者都没有输入,所以neo4j对你的’Pet’或’Car’-Class一无所知. Spring数据neo4j通过索引每个类型的所有节点并设置type-attribute,或使用特定的图形布局(带子引用)来处理这个问题.即使你想要获取具有遍历描述的人的所有宠物,你也会有更多的代码要编写,因为名称为’OWNS’的传出关系包含两种类型的对象.
我建议使用两个不同的名字.稍后编写自定义遍历/查询会更容易,也可能更快,因为不需要进行类型比较.有什么理由,为什么你需要这些特定的名字?
PS:有可能,并非一切都是100%准确.我不太详细了解springdataneo4j,但这是我到目前为止所知道的.
原文地址:https://www.jb51.cc/spring/431996.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。