selectManyCheckbox LazyInitializationException при проверке процесса - PullRequest
12 голосов
/ 10 апреля 2011

Похоже, что если вы используете selectManyCheckbox, поддерживаемый набором, который проксируется в hibernate, вы столкнетесь с проблемами со страшным LazyInitializationException.Это не имеет никакого отношения к состоянию компонента поддержки!

После отладки Mojarra 2.1 я обнаружил, что если вы не включите атрибут collectionType, он попытается клонировать класс значения поддержки на этапе проверки процесса,в моем случае это PersistentSet.Конечно, добавление любого значения к этому вызовет LazyInitializationException.

Мой вопрос заключается в том, считаете ли вы, что это разумное поведение на этапе проверки процесса?посмотреть на интерфейс и создать экземпляр известного класса из java.util.

Ответы [ 2 ]

7 голосов
/ 24 октября 2013

В этом суть!Это не имеет ничего общего с состоянием сеанса ... Я столкнулся с этой проблемой, и я смог решить ее, добавив в свой компонент следующее (в моем случае это selectManyMenu):

<f:attribute name="collectionType" value="java.util.ArrayList" />;
0 голосов
/ 05 февраля 2013

Спасибо за подсказку об использовании атрибута collectionType для тегов h: selectMany для предотвращения исключения LazyInitializationException.

Однако , вместо того, чтобы рассказывать об этом на неподходящем форуме, как насчет того, чтобы узнать, что нового в JSF 2.0, и опубликовать полный пример этой проблемы и как ее исправить?

Groundwork:

Stack Трассировка этой ошибки:

04.02.2013 13:20:50 com.sun.faces.lifecycle.ProcessValidationsPhase execute ВНИМАНИЕ: не удалось лениво инициализировать коллекцию, ни один сеанс или сеанс не был закрыт org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию, ни один сеанс или сеанс не был закрыт в org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException (AbstractPersistentCollection.java:383) в org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected (AbstractPersistentCollection.java:375) в org.hibernate.collection.AbstractPersistentCollection.readSize (AbstractPersistentCollection.java:122) в org.hibernate.collection.PersistentBag.isEmpty (PersistentBag.java:255) в javax.faces.component.UIInput.isEmpty (UIInput.java:1257) в javax.faces.component.UIInput.validateValue (UIInput.java:1144) at javax.faces.component.UISelectMany.validateValue (UISelectMany.java:579)

Пример добавления collectionType для исправления этой ошибки (я использую пользовательский валидатор):

<h:selectManyListbox value="${technologyService.entity.associatedLabs}"
collectionType="java.util.ArrayList">
<f:validator validatorId="selectManyListboxValidator" />
<f:attribute name="maxItems" value="5" />
<f:selectItems value="${metadataService.activeLabSelectItems}" />
</h:selectManyListbox>
...