1
我正在調查Neo4j和有關對象渴望/延遲加載的問題。可以說,我有班級手推車Set<Item>
(與getters/setters)。如果我做到以下幾點:Neo4j渴望/延遲加載春天的數據
Trolley t = new Trolley(...); // create empty trolley
t.addItem(f); // add one item to the trolley
t.persist(); // persist the object
我後來發現基礎上,NODEID小車:
repo.findOne(xxx); // returns the trolley successfully
當我做這樣的事情:
trolley.getItems().size()
這是空的。我想這是預期的行爲。是否有任何類似於JPA的機制,其中session/tx是否打開以動態加載集合。
代碼:
@NodeEntity
public class Trolley
{
@Indexed
private String name;
@RelatedTo
private Set<Item> items;
public Trolley(){}
public Trolley(String name)
{
this.name = name;
}
public void addItem(Item item)
{
this.items.add(item);
}
public Set<Item> getItems()
{
return items;
}
}
@NodeEntity
public class Item
{
private String name;
public Item(){}
public Item(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
@Test
public void trolleyWithItemPersist()
{
Trolley trolley = new Trolley("trolley1").persist();
// Persisting - however I would've expected a cascade to
// occur when adding to the collection.
Item item = new Item("item1").persist();
// now add to the trolley
trolley.addItem(item);
// persist
trolley.persist();
// Now use repo to get trolley
Trolley loadedTrolley = trolleyRepository.findOne(trolley.getNodeId());
// should have one item
assertEquals(1, loadedTrolley.getItems().size());
}
f也是NodeEntity?您可能需要先堅持一個。通常它應該通過級聯向前工作,但這可能是一個角落。 你可以顯示Trolley和「f」的類定義嗎? 謝謝 –
f的確是NodeEntity。我試圖堅持這一點,但最終的結果是一樣的。即f.persist()然後添加到集合中。我想我可以試試@RelationshipEntity?我將粘貼定義和一個簡單的測試。 – imamc
嗨邁克爾,我認爲你是對的,修復是先堅持然後再加入收藏。我預料會發生級聯以識別添加的元素具有適當的元數據以顯示它也是節點。上面顯示了工作測試,沒有對Item item = new Item(「item1」)進行持久化。persist();將導致測試失敗。 – imamc