Я начал переключать проект с рукописного кода JDBC ORM на Ebeans.Пока это было здорово;Ebeans легок и прост в использовании.
Однако я столкнулся с серьезной проблемой: при извлечении списка «один ко многим», который должен быть пустым, в нем фактически есть один элемент.Этот элемент выглядит как некий прокси-объект, который имеет все нулевые поля, поэтому он разбивает код, который проходит через коллекцию.
Я включил здесь сокращенные определения:
@Entity
class Store {
...
@OneToMany(mappedBy="store",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
List<StoreAlbum> storeAlbums = new LinkedList<StoreAlbum>();
}
@Entity
class StoreAlbum {
...
@ManyToOne(optional=false,fetch=FetchType.EAGER)
@JoinColumn(name="store_id",nullable=false)
Store store;
}
... где все стандартные методы получения и установки.Код извлечения выглядит следующим образом:
Store s = server.find(Store.class)
.where()
.eq("store_id",4)
.findUnique();
Assert.assertEquals("Sprint",s.getStoreName());
Assert.assertEquals(0, s.getStoreAlbums().size());
Известно, что база данных содержит строку «store» для «Sprint», а таблица «store_album» не содержит строк для этого хранилища.
Тест JUnit не выполняется для второго утверждения.Он находит список с 1 элементом, который является неким поврежденным объектом StoreAlbum.Отладчик показывает объект как тип "com.lwm.catalogfeed.domain.StoreAlbum$$EntityBean$test@1a5e68a" со значениями NULL для всех полей, которые объявлены как nullable = false (и необязательно = false).
Я что-то здесь упускаю?