2015-06-18 46 views
1

語境關係屬性在圖表不會保留

  • 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()操作無法按預期工作

回答

0

對於尋找af ix,我做了一個關於這個問題的報告(https://jira.spring.io/browse/DATAGRAPH-699),像以前一樣快速使用SDN(< 3.3.x)就是這樣做的:

刪除「spring-data-neo4j」和「spring-data- Neo4j的休息」從你的build.gradle並添加這些行:

repositories { 
     maven { 
      url "https://jitpack.io" 
     } 
    } 

dependencies { 
    compile 'org.springframework:spring-orm:4.1.7.RELEASE' 
    compile 'org.springframework:spring-aspects:4.1.7.RELEASE' 
    compile 'com.github.nousmotards:spring-data-neo4j:3.3.1.NM1' 
} 

希望這將有一個真正的修復程序的平均時間幫助;)