среда, 4 июня 2008 г.

simultaneously fetch multiple bags

Вчера работая с ejb3 столкнулся с проблемой упомянутой в заголовке поста. При создании связи many-to-many если указываешь fetch="EAGER" при деплое модуля jboss-4.2.0.GA выдавал ошибку и ругался такими словами "simultaneously fetch multiple bags".

Нет бы сенсея спросить с чего такое может быть, но нет мы же умные и у нас трафик еще есть — отправился гуглить. Часа полтора ушло на эту проблему, а может и побольше чуток. Как оказалось это не бага, а фича. Причем сенсей был о ней неплохо осведомлен.

В общем смотрите решение :)

1. fetch="LAZY"

если вам необходимо использовать EAGER, то используем следующее

2. заменяем Collection и List в которых у нас находятся связанные сущности на Set и наслаждаемся тем что все проходит на ура.

Пример
Было
protected List<Group> groups = new ArrayList<Group>();

Стало
protected Set<Group> groups = new HashSet<Group>();

P.S.: народ а что лучше использование аннотаций в entity или описывать сущности в orm.xml?