java - RelationshipEntity not persisted -
i'm having problems relation
@relationshipentity(type = reltypes.tag.tag_on_object_evaluation) public class tagonobjectevaluation { @startnode private mashup taggableobject; @endnode private tag tag; // other fields, getters , setters }
in both entities involved (mashup
, tag
), have field (with opposite direction)
@relatedtovia(type = reltypes.tag.tag_on_object_evaluation, direction = direction.incoming /*direction.outgoing*/) private set<tagonobjectevaluation> tagonobjectevaluations = new hashset<tagonobjectevaluation>();
then, have various service class manage tag
, mashup
, tagonobjectevaluation
. class under test latter. note: name bit confusing , it's legacy previous coder, can read dao service. genericneo4jdaoimpl (again, read genericserviceneo4jimpl) defines standard methods entities management (create()
, find()
, update()
, delete()
, fetch()
)
@service public class tagonobjectevaluationdaoneo4jimpl extends genericneo4jdaoimpl<tagonobjectevaluation> implements tagonobjectevaluationdao { @autowired private tagonobjectevaluationrepository repository; public tagonobjectevaluationdaoneo4jimpl() { super(tagonobjectevaluation.class); } public tagonobjectevaluationdaoneo4jimpl( class<? extends tagonobjectevaluation> entityclass) { super(entityclass); } @override public tagonobjectevaluation create(tagonobjectevaluation t) { transaction tx = template.getgraphdatabaseservice().begintx(); tagonobjectevaluation savedt = null; try { // enforce uniqueness of relationship. know can fail in many ways, not problem atm savedt = template.getrelationshipbetween( t.gettaggableobject(), t.gettag(), tagonobjectevaluation.class, reltypes.tag.tag_on_object_evaluation); if (savedt == null) savedt = super.create(t); tx.success(); } catch (exception e) { tx.failure(); savedt = null; } { tx.finish(); } return savedt; } }
it seems pretty straightforward until now. when i'm trying persist relationshipentity
instance, have many problems.
@test public void testrelationshipentitywaspersisted() { tagonobjectevaluation tagonobjectevaluation = new tagonobjectevaluation(taggedobject, tag); tagonobjectevaluationdao.create(tagonobjectevaluation); assertnotnull(tagonobjectevaluation.getid()); logger.info("tagonobjectevaluation id = " + tagonobjectevaluation.getid()); tagdao.fetch(tag); assertequals(1, tag.gettaggedobjectsevaluations().size()); }
the last test fail: size 0 , not 1. also, although seems entity correctly stored (it gets id
assigned), if i'm navigating db later on there no track of @ all. i've tried add relationship in different way, using sets of involved nodes; f.e.
tag.gettaggedobjectsevaluations().add(tagonobjectevaluation); tagdao.update(tag);
but no improvements @ all.
you need change direction of relationship in entity mashape
, (entity corresponding @startnode
of @relationshipentity
tagonobjectevaluation
).
@nodeentity class mashape { // ... @relatedtovia(type = reltypes.tag.tag_on_object_evaluation, direction = direction.outgoing) private set<tagonobjectevaluation> tagonobjectevaluations = new hashset<tagonobjectevaluation>(); }
just point according specifications of @relatedtovia
spring-data-neo4j
annotation, direction default outgoing
, don't need specify direction in case. should correct:
@relatedtovia(type = reltypes.tag.tag_on_object_evaluation) private set<tagonobjectevaluation> tagonobjectevaluations = new hashset<tagonobjectevaluation>();
hope helps.
Comments
Post a Comment