JPA & Ebean ORM: пустая коллекция не пуста - PullRequest
2 голосов
/ 25 марта 2011

Я начал переключать проект с рукописного кода 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).

Я что-то здесь упускаю?

Ответы [ 2 ]

1 голос
/ 15 ноября 2013

Я столкнулся с той же проблемой и смог ее решить, добавив столбец идентификаторов во вторичную таблицу (StoreAlbum). Я не исследовал причину, но полагаю, что Ebean нуждается в первичном ключе на столе в подобных ситуациях.

1 голос
/ 19 мая 2011

Думал, что выложу обновление об этом ... В итоге я отказался от EBeans и вместо этого переключил реализацию на использование MyBatis.MyBatis - это фантастика;Руководство легко читать и тщательно.MyBatis делает то, что вы ожидаете.Я получил его и работает в кратчайшие сроки.

Похоже, что EBeans не обнаружил, что объединение для связанной коллекции привело к множеству нулевых идентификаторов, но MyBatis обработал этот сценарий чисто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...