@RelationshipEntity(type = RelTypes.Tag.TAG_ON_OBJECT_EVALUATION)
public class TagOnObjectEvaluation
{
@StartNode
private Mashup taggableObject;
@EndNode
private Tag tag;
// Other fields, getters and setters
}
在兩個所涉及的實體(Mashup
和Tag
)的問題,我有此字段(反方向)
@RelatedToVia(type = RelTypes.Tag.TAG_ON_OBJECT_EVALUATION,
direction = Direction.INCOMING /*Direction.OUTGOING*/)
private Set<TagOnObjectEvaluation> tagOnObjectEvaluations =
new HashSet<TagOnObjectEvaluation>();
然後,我有各種服務級別管理Tag
,Mashup
和TagOnObjectEvaluation
。現在被測試的類是後者。 注意:該名稱有點令人困惑,這是以前編碼器的遺留問題,您可以將DAO作爲服務讀取。此外GenericNeo4jDAOImpl(再次,它讀成GenericServiceNeo4jImpl)簡單地定義爲實體管理(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
{
// This is to enforce the uniqueness of the relationship. I know it can fail in many ways, but this is not a 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;
}
finally
{
tx.finish();
}
return savedT;
}
}
似乎非常簡單到現在的標準方法。 但是當我試圖堅持一個RelationshipEntity
實例時,我遇到了很多問題。
@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());
}
的最後一次測試失敗:大小爲0而不是1。此外,雖然似乎實體存儲正確的(它得到一個id
分配),如果我以後航行的分貝有根本沒有跟蹤。 我也嘗試以不同的方式添加關係,使用涉及節點的集合; F.E.
tag.getTaggedObjectsEvaluations().add(tagOnObjectEvaluation);
tagDao.update(tag);
但沒有任何改進。
也許我錯了,但我認爲在你的'Mashape'實體中,方向應該是'OUTOING'。你可以試試嗎? – troig
你是對的,讓它成爲答案,以便我可以接受它併爲正在發生的事情添加評論 – tigerjack89
爲什麼在標題中使用***Ŗ***? –