@RelatedToVia
注释NodeEntity
对象上的字段,作为对将该节点连接到另一个节点的@RelationshipEntity
对象的引用。相反,@RelatedTo
将该字段标记为对连接节点本身的引用,并且具有可选的type
参数,该参数可用于指定两个节点之间的关系类型。
@RelationshipEntity(type="SOME_LINK")
class SomeLink {
@StartNode
FooNode foo;
@EndNode
BarNode bar;
}
@NodeEntity
class FooNode {
@RelatedTo(type="SOME_LINK")
BarNode bar;
@RelatedToVia(type="SOME_LINK") //what's the point in this annotation?
SomeLink link;
}
@RelatedToVia
具有相同的可选type
参数,我很好奇为什么:关系类型在字段类型中指定(带@RelatedToVia
注释的字段必须被输入到@RelationshipEntity
- 带注释的类,它必须指定要编译的类型),那么在注释参数中指定它的重点是什么?
更令人困惑的是,@RelatedToVia
还有一个可选的elementClass
参数,根据文档,“返回目标关系实体类” - 完全指定的内容在字段类型中。
@RelatedToVia(elementClass=SomeLink.class) //what's the point?
SomeLink link;
@RelatedToVia(elementClass=SomeOtherLink.class) // ????
SomeLink link;
我很好奇,因为我有一种预感,这是为了在RelationshipEntity
类和RelatedToVia
字段中实现一些有用的多态行为,我很想看到这样一种行为的例子可能会实施。作为奖励,使用两种不同的注释可以实现不同的种行为?
此外,似乎很奇怪这些参数都存在(可能是冗余的)指定关系的类型,而没有参数用于指定关系另一端的节点的类 - 这可以但不一定在RelationshipEntity
课程中声明,并且在某些情况下对我有用。为什么会这样?
答案 0 :(得分:0)
此:
@RelatedToVia(type="SOME_LINK")
优先于
@RelationshipEntity(type="SOME_LINK")
和
@RelatedToVia(elementClass=SomeOtherLink.class) // this is indeed redundant
SomeLink link;
// this is NOT redundant, you lose the type information in runtime in Java
// you only know that link is a set, don't know of which type
@RelatedToVia(elementClass=SomeOtherLink.class)
Set<SomeLink> link;
有多种方式来设置关系可以提供灵活性。您可以为具有相同属性的多个不同关系类型重用相同的关系类。
在参考文档中查看更多内容