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