Neo4j нетерпеливо загружает данные Spring - PullRequest
1 голос
/ 04 октября 2011

Я исследую Neo4j и у меня есть вопрос, касающийся загрузки объекта.Допустим, у меня есть класс Trolley с Set<Item> (с геттерами / сеттерами).Если я сделаю следующее:

Trolley t = new Trolley(...); // create empty trolley
t.addItem(f);  // add one item to the trolley
t.persist(); // persist the object 

Я потом найду тележку на основе ID узла:

repo.findOne(xxx); // returns the trolley successfully

Когда я сделаю что-то вроде:

trolley.getItems().size() 

это пустоЯ предполагаю, что это предполагаемое поведение.Существует ли механизм, аналогичный JPA, где сеанс / 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 голосов
/ 04 октября 2011

Afaik, в Spring Data Jpa, чтобы заполнить ленивое загруженное поле, необходимо аннотировать метод, который вызывает findOne(xxx) с помощью

@Transactional 

из (org.springframework.transaction.annotation.Transactional)

Может быть, этотакже работает с neo4j ...

Я не очень опытный разработчик Spring Data, но это единственный известный мне способ получения ленивых загруженных полей.Если у кого-то есть лучшее решение, не стесняйтесь написать его!

...