Получение аннотации в SDG 2.0, получение вопросов по стратегии.

Привет всем терпеливым разработчикам, использующим график данных Spring. Из-за того, что документации так мало и тестовое покрытие довольно низкое, иногда очень трудно понять, каково ожидаемое поведение базовой структуры, как она должна работать. В настоящее время у меня есть несколько вопросов, связанных с новым подходом к извлечению, представленным в SDG 1.1. В отличие от SDG 1.1 запись \ чтение в 2.0 с нетерпением выбираются только отношения и связанный объект, аннотированный аннотацией @Fetch, другие должны извлекаться лениво ... и теперь мой первый вопрос:

  • Можно ли настроить SDG так, чтобы если загрузка объекта и вызов геттера для ленивого отношения происходит в одной транзакции, запрошенная коллекция извлекается автоматически? Вид постоянства Контекст в области транзакции, или, возможно, это запланировано для выпусков функции .
  • Как мне сразу получить ленивую коллекцию для аннотации @RelatedTo? Метод fetch () из Neo4jOperation позволяет получать только одну сущность. Нужно ли мне перебирать весь список и извлекать сущность для каждого объекта? Как лучше всего проверить, был ли данный объект уже получен / инициализирован или нет?
  • В качестве предложения, я думаю, было бы более интуитивно понятно, если бы вместо получения NPE при работе с неинициализированным объекты.Более того, поведение вводит в заблуждение, поскольку, когда объект не инициализирован, а все свойства-члены имеют значение NULL, кроме id, метод equals может предоставлять true для различных объектов, которые не были инициализированы, что является довольно серьезной проблемой, учитывая, например, применение наборов
  • Другой Проблема, которую я заметил при работе с SDG 2.0.0.RC1, следующая: когда я добавляю новый объект в невыбранную коллекцию, иногда он правильно добавляется и сохраняется, а иногда - нет. Я написал тест для этого случая, и он работает недетерминированно. Иногда неудачи заканчиваются успехом. Вот пример использования:

     Group groupFromDb = neoTemplate.findOne (group.getId (), Group.class); 
    assertNotNull (groupFromDb); 
    assertEquals ("Количество членов должно быть равно 1 ", 1, groupFromDb.getMembers (). size ()); 
    Пользователь secondMember = UserMappingTest.createUser (" secondMember "); 
    groupFromDb.addMember (secondMember); {{1 }} neoTemplate.save (groupFromDb); 
    Группа groupAfterChange = neoTemplate.findOne (groupFromDb.getId (), Group.class); 
    assertNotNull (groupAfterChange); 
    assertEquals (" Количество членов должно быть равно сохраненному объекту ", groupFromDb.getMembers (). Size (), groupAfterChange.getMembers (). Size ()); 
    assertEquals (" Количество членов должно быть равно 2 ", 2, groupAfterChange.getMembers (). Size ()); 
     

Этот тест иногда терпит неудачу при последнем утверждении, что может означать, что иногда член добавляется в набор, а иногда нет. Я предполагаю, что проблема находится где-то в ManagedFieldAccessorSet, но трудно сказать, поскольку это недетерминировано. Я запускаю тест с mvn2 и mvn3 с java 1.6_22 и 1.6_27, и я всегда получал один и тот же результат: иногда это нормально, иногда тест не проходит. Реализация User equals выглядит следующим образом:

@Override
public boolean equals(final Object other) {
    if ( !(other instanceof User) ) {
        return false;
    }
    User castOther = (User) other;
    if(castOther.getId() == this.getId()) {
        return true;
    } 
    return new EqualsBuilder().append(username, castOther.username).isEquals();
}

- Я также считаю, что для объектов, аннотированных с помощью @Fetch, используется java HashSet, который можно сериализовать, а для ленивых загружаемых полей используется ManagedFieldAccessorSet, который не сериализуем и не вызывает сериализуемое исключение.

Любая помощь или совет приветствуются. Заранее спасибо!

6
задан Sempa 21 November 2011 в 21:36
поделиться