java - Why does @RelatedToVia have optional type and elementClass parameters? -
@relatedtovia in spring-data-neo4j annotates field on nodeentity object reference @relationshipentity object connecting node node. @relatedto, in contrast, marks field reference connected node itself, , has optional type parameter can used specify type of relationship between 2 nodes.
@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 point in annotation? somelink link; } @relatedtovia has same optional type parameter, , i'm curious why is: type of relationship specified in field type (a field annotated @relatedtovia must typed @relationshipentity-annotated class, must specify type compile), point of specifying in annotation parameter?
even more confusingly, @relatedtovia has optional elementclass parameter that, according docs, "returns target relationship entity class" - exactly what's specified in field type.
@relatedtovia(elementclass=somelink.class) //what's point? somelink link; @relatedtovia(elementclass=someotherlink.class) // ???? somelink link; i'm curious because have hunch intended enable useful polymorphic behavior relationshipentity classes , relatedtovia fields, , i'd love see example of how such behavior might implemented. bonus, different sorts of behaviors can achieved using 2 different annotations?
also, seems curious both these parameters exist (possibly redundantly) specifying type of relationship, while no parameter exists specifying class of node on other end of relationship - can isn't declared in relationshipentity class, , have been useful me on couple of occasions. why might be?
this:
@relatedtovia(type="some_link") has precedence over
@relationshipentity(type="some_link") and
@relatedtovia(elementclass=someotherlink.class) // indeed redundant somelink link; // not redundant, lose type information in runtime in java // know link set, don't know of type @relatedtovia(elementclass=someotherlink.class) set<somelink> link; having multiple ways set relationship gives flexibility. can reuse same relationship class multiple different relationship types have same properties.
see more in reference docs
Comments
Post a Comment