Метод сохранения состояния JSF и ленивые отношения - PullRequest
0 голосов
/ 25 октября 2010

У меня есть классы по моей доменной модели с множеством ленивых отношений; Я использовал сохранение состояния на стороне сервера с JSF, и это позволило мне инициализировать эти ленивые отображения по требованию на уровне представления.

Но переключаясь на сохранение состояния на стороне клиента, у меня есть исключение из EclipseLink, сообщающее, что он не может сериализовать представление. Рассматриваемый EL использует цепочку методов для отображения имени пользователя (ленивое отношение пользователя, как показано ниже):

<h:outputText value="#{labels['name']}: #{bean.project.manager.name}" />

Исходный код для уровня представления JSF имеет это повсеместно. Предварительная инициализация этих отношений является дорогостоящей, и, кроме того, некоторые части представления могут отображаться не сразу, так что ... У вас есть какие-нибудь предложения? Вы когда-нибудь сталкивались с этим при использовании EclipseLink?

Кстати, это JSF 2 с Glassfish v3.0.1. PrimeFaces как библиотека компонентов, EJB и CDI как клей.

Заранее спасибо!

1 Ответ

1 голос
/ 10 ноября 2010

После того, как вы сериализовали объект с отношениями LAZY, вы больше не сможете его создавать.Вам нужно либо избежать сериализации, либо убедиться, что перед сериализацией создаются экземпляры нужных отношений.

Вы можете создать экземпляр отношения, просто обратившись к нему, для отложенной коллекции просто отправьте size () в коллекцию.Вы также можете использовать LoadPolicy в EclipseLink> = 2.1, чтобы выбрать, какие отношения создаются в запросе.Вы также можете переопределить метод сериализации вашего объекта, чтобы сначала принудительно создать экземпляр для желаемых отношений.

Не то чтобы с большинством других поставщиков JPA вы не смогли создать экземпляр отношения после завершения транзакции / закрытия EntityManager, так что дажесостояние на стороне сервера не будет работать.

...