2015-04-23 2 views
0

Я пытаюсь понять, почему Jackson JSON Сериализация коллекции из 250 объектов занимает 40 секунд, и я думаю, что я сузил ее до ленивой загрузки SDN. Я использую @Fetch, но все равно кажется, что он запрашивает базу данных для делегата для каждого атрибута каждого узла в коллекции. Пожалуйста, проигнорируйте любые опечатки, как я должен это сделать, поскольку копирование-вставка не является вариантом. Будьте уверены, класс компилируется, как ожидалось. (Упрощенный) класс сериализации:Весенние данные Neo4J @Fetch Проблема, наблюдаемая с помощью Jackson Serialization

@NodeEntity 
public class NodeWithDelegate { 

    @RelatedTo(type="REL_NAME", direction=Direction.OUTGOING) 
    @Fetch private DelegateNode delegate; 

    private DelegateNode getInitializedDelegate() { 
    if (delegate == null) { 
     delegate = new DelegateNode(); 
    } 
    return delegate; 
    } 

    public String getDelegateAttribute1() { 
    return delegate == null ? null : delegate.getAttribute1(); 
    } 

    public void setDelegateAttribute1(String attribute1) { 
    getInitializedDelegate().setAttribute1(attribute1); 
    } 

    .... 

    public String getDelegateAttribute15() { 
    return delegate == null ? null : delegate.getAttribute15(); 
    } 

    public void setDelegateAttribute15(String attribute15) { 
    getInitializedDelegate().setAttribute15(attribute15); 
    } 
} 

DelegateNode класс именно то, что можно было бы ожидать, только простой @NodeEntity POJO, содержащий 15 Строка или Integer или Boolean атрибуты.

Так два вопроса действительно:

  1. , как я могу сказать наверняка, если фактически жадностью загружен объект? Я использую eclipse.
  2. Для целей отладки, если объекты все загружены, и я установил точку останова между выборкой коллекции из базы данных и сериализатором, который вызывает все получатели делегатов, и при приостановке закрытия базы данных, должен ли он работать? Есть ли какая-либо причина, по которой объекты должны будут разговаривать с базой данных в этот момент, если все ее загрузится?

Думаю, я должен упомянуть, что использую остальные api для neo4j.

Большое спасибо заранее!

ответ

0

Я предполагаю, что вы используете 3.x версию Spring Data Neo4j.

Эта версия не очень оптимизирована для REST api. Если вы включите протоколирование запросов cypher, вы увидите много. Пример log4j:

log4j.category.org.springframework.data.neo4j.support.query=DEBUG 

Вы можете обойти это ограничение с помощью пользовательского Cypher запроса и отображения результата с @QueryResult аннотацию.

  1. Использование протоколирования вы должны увидеть ваши объекты загружаемой

  2. Он должен, если не что-то «ленивым» в самом DelegateNode.

+0

Я. Я изучаю 4.0.0.M1 в настоящее время в филиале, что является огромным начинанием. Но похоже, что это будет лучше подходит для нашего приложения и ограничений, которые мы находим с помощью REST api. Просто хочу, чтобы я знал, когда запланированная дата GA для нее будет. – guydog28

+0

О, и нет ничего ленив в DelegateNode, только свойства, но когда я закрываю сервер neo4j, я получаю исключение подключения, когда он пытается вызвать getDelegateNode из NodeWithDelegate, который, по моему мнению, пытается поговорить с база данных. – guydog28

Смежные вопросы