我正在调查Neo4j并且有关于对象渴望/延迟加载的问题。让我们说我的班级手推车有Set<Item>
(有吸气剂/安装者)。如果我执行以下操作:
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());
}
答案 0 :(得分:0)
Afaik,在Spring Data Jpa中,要填充延迟加载的字段,您需要注释使用
调用findOne(xxx)
的方法
@Transactional
来自(org.springframework.transaction.annotation.Transactional)
也许它也适用于neo4j
...
我不是真正熟练的Spring Data开发者,但这是我知道检索延迟加载字段的唯一方法。如果有人有更好的解决方案,请随时写下来!