我遇到索引問題/使用SDN 2.0.0.RELEASE和Neo4j 1.5存在問題。persist()始終創建新節點
我有一個域類「字」基本上是這樣的:
@NodeEntity
public class Word {
@GraphId
Long graphId;
@Indexed(indexType = IndexType.SIMPLE, indexName = "Word_wordString")
private String wordString;
@RelatedTo(direction = Direction.INCOMING, elementClass = Sentence.class, type = "HAS")
private Set<Sentence> sentences;
public Word() {
}
public Word(String wordString) {
setWordString(wordString);
}
}
我堅持的話用這種方法:
private void persistWord(Sentence sentence, Word word) {
System.out.println("checking index for wordString: "
+ word.getWordString());
Word existingWord = wordRepository.findByPropertyValue(
"wordString", word.getWordString());
if (existingWord != null) {
existingWord.addSentence(sentence);
existingWord.persist();
System.out.println("persisted already existing word "
+ existingWord);
} else {
word.persist();
System.out.println("persisted word " + word);
}
它應該檢查這個詞已經在如果是這樣,我改變了由wordRepository返回的對象的一些屬性,然後堅持更改( - > if(existingWord!= null))。如果該單詞不在圖中,它只是持久( - > else)。
但是,這總是爲每個單詞創建一個新節點,即使它存在於圖表中。可以這麼說,persist()總是創建一個新節點。 後有兩個詞具有相同wordString在圖中,庫方法拋出:
More than one element in [email protected] First element is 'Node[45]' and the second element is 'Node[83]'
這是怎麼回事?
我也想知道IndexType.SIMPLE,IndexType.POINT和IndexType.FULLTEXT之間的區別是什麼。 (這不是API或良好關係的指南)
我已經讓我的WordRepository擴展了GraphRepository和NamedIndexRepository並使用了'wordRepository.findByPropertyValue(「Word_wordString」,「wordString」,word.getWordString());'來檢查現有的單詞。 代碼與我原來的問題相同,除了檢查索引的行外。會發生什麼是,一個單詞首次被持續存在時,索引將如預期返回null,新單詞將被保留。第二次,索引按預期返回一個對象實例。然而,第三次索引拋出了與我原來的問題相同的例外。 – Tobias 2012-02-07 22:08:38
因此,我認爲,堅持方法總是在索引中創建一個新節點和或條目!我會檢查這些單詞包含哪些字符,但爲了測試目的,我們在初始設置時將它們全部修剪。 – Tobias 2012-02-07 22:12:49