- SDN 3.3.0.RELEASE/3.4.0.M1
- 的Neo4j 2.1.7在遙遠服務器模式。
使用情況
我在數據庫中的現有人員可以有多個PersonTranslatedContent可以在幾種語言。 所以basicaly,我modelisation是這樣的:
(:Person)-[:TRANSLATION {lang:"fr}]->(:PersonTranslatedContent)
問題
當我創建一個PersonTranslatedContent節點和翻譯的關係與我的人聯繫起來,在「郎」屬性不上關係持續。 的節點corecctly創建的,但是當我從Neo4j的瀏覽器查詢數據庫,我的關係只有一個屬性:_type__ : PersonToPersonTranslatedContent
分析
在登錄時通過的Neo4j收到的HTTP請求,執行requets是順序如下:
1. MATCH (n) WHERE id(n) = {id_n} MATCH (m) WHERE id(m) = {id_m} CREATE (n)-[r:`TRANSLATION`]->(m) SET r={props} RETURN id(r) as id, type(r) as type, r as properties, id(startNode(r)) as start, id(endNode(r)) as end
2. START r=rel({id}) SET r.`_ _type_ _` = {value}
3. START r=rel({id}) RETURN id(r) as id, type(r) as type, r as properties, id(startNode(r)) as start, id(endNode(r)) as end
4. **START r=rel({id}) SET r.`lang` = {value}** <-- here the lang property seems to be correctly set !
5. START r=rel({id}) SET r = {props} <- here, props = {"_ _type_ _" : PersonToPersonTranslatedContent"}
所有這些REST調用是一個簡單的調用中做personToPersonTranslatedContentRepository.save()。我隨後在調試模式下白色RABIT,這裏是縮短的調用堆棧:
- Neo4jEntityConverterImpl.write() - > entityStateHandler.useOrCreateState() - > RestAPICypherImpl.createRelationship()(對應於子彈1 )
- Neo4jEntityConverterImpl.write() - > typeMapper.writeType() - > RestAPICypherImpl.setPropertyOnEntity()(對應於子彈2)
- Neo4jEntityConverterImpl.write() - > sourceStateTransmitter.copyPropertiesTo() - - > persistentEntity.doWithProperties() - > RestAPICypherImpl.setPropertyOnEntity()(對應於子彈4)
- Neo4jEntityConverterImpl.write() - > sourceStateTransmitter.copyPropertiesTo() - >((UpdateableState)目標).flush() - > RestAPICypherImpl.setPropertiesOnEntity()(對應於子彈5)
所以,在我看來,考慮到我所知道的和我的調試過程中所看到的,這個問題似乎是圍繞類RestEntity的這是在((UpdateableState)目標所用的「propertyData」屬性)。 flush()!它總是抱着值{「_ 型 _」:PersonToPersonTranslatedContent「},但決不會包含我的‘郎’屬性
注意:我的問題是一樣的一個解釋這裏3.3.0.M1 : Properties on RelationShipEntity not saved when using CypherRestGraphDatabase?他的文章沒有。滿意的答案。
你能幫助我嗎?
THX :)
13/07/15:更新
我終於設法通過使用來解決我的問題:
Map<String, Object> properties = new HashMap<>(); properties.put("lang", lang); properties.put("__type__", "UserToUserTranslatedContent");
neo4jOperations.createRelationshipBetween(neo4jOperations.getNode(user.getId()), neo4jOperations.getNode(translatedContent.getId()), RelationNames.TRANSLATION, properties);
,但它仍然是奇怪的是簡單save()操作無法按預期工作