2

讓我們有這樣的階級結構:第二標籤添加到繼承的節點彈簧數據的Neo4j-4

@NodeEntity 
abstract class BasicNodeEntity { 
    @GraphId 
    private Long nodeId; 
    //... 
} 

abstract class IdentifiableEntity extends BasicNodeEntity { 
    private String id; 
    //... 
} 

abstract class Ad extends IdentifiableEntity { 
    //... Ad attibutes 
} 

class OfferAd extends Ad { 
    // ... OfferAd attibutes 
} 

通過Neo4jRepository保存的OfferAd節點,我希望該節點將有兩個標籤:OfferAdAd(繼承)。但是,標籤Ad未添加到節點。

我知道我可以通過密碼查詢來保存節點,但我想知道是否可以通過Neo4jRepository代替。

我查看this question(與SDN3),我認爲這是非常接近我的使用情況,但它似乎沒有工作...

任何幫助,將不勝感激。謝謝

回答

6

用於標籤的規則如下:

  • 層次結構中的任何普通混凝土類生成默認標籤
  • 純抽象類默認不
  • 生成標籤
  • 純文本界面默認不生成標籤
  • 任何用@NodeEntity或@NodeEntity(label =「something 「)生成一個標籤
  • 空或空標籤,決不允許
  • 類/不屬於被持久化必須@Transient

被註釋因此,如果您從您的基類的抽象層次,或者添加一個@NodeEntity註釋,您應該會看到您期望的結果。

另外(新的OGM 2.0.4和2.0.5中修復),您可以添加和創建Collection<String>類型的字段並用@Labels標註它,例如刪除附加標籤:

@Labels 
private List<String> labels = new ArrayList<>(); 

使用2.0版。4(gradle):

compile "org.neo4j:neo4j-ogm-core:{version}" 
compile "org.neo4j:neo4j-ogm-http-driver:{version}" 
+0

感謝有關標籤說明的詳細規則。 – troig

+0

不客氣@troig :)讓我們知道如果你有任何問題獲得2.0.4/5集成。 –

2

就像在Ad類中添加@NodeEntity註釋一樣簡單。 這似乎是spring-data-neo4j-4默認情況下每個節點只創建一個標籤,即使該節點繼承另一個標籤。

如果我們想要允許SDN添加父標籤類,我們需要爲它們添加@NodeEntity

因此,對於這種使用情況下,如果我們把它添加到Ad類,

@NodeEntity 
abstract class Ad extends IdentifiableEntity { 
    //... Ad attibutes 
} 

當我們保存OfferAd通過Neo4jRepository,創建的節點將有兩個標籤:AdOfferAd。是

enter image description here