Neo4j急切/延迟加载Spring数据

时间:2011-10-03 20:37:58

标签: spring neo4j spring-data

我正在调查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());

}

1 个答案:

答案 0 :(得分:0)

Afaik,在Spring Data Jpa中,要填充延迟加载的字段,您需要注释使用

调用findOne(xxx)的方法
@Transactional 

来自(org.springframework.transaction.annotation.Transactional)

也许它也适用于neo4j ...

我不是真正熟练的Spring Data开发者,但这是我知道检索延迟加载字段的唯一方法。如果有人有更好的解决方案,请随时写下来!

相关问题