Ошибка Unfetched attribute access error при сохранении сущности

Добрый день. Прошу помочь разобраться с проблемой.
В приложенном тестовом проекте созданы сущности
EquipmentGroup, Equipment, EquipmentKit, EquipmentKitLine и Machine
Связи:
EquipmentGroup композиция -one2many- Equipment,
EquipmentKit ассоциация -many2one- Machine,
EquipmentKit композиция -one2one- EquipmentKitLine
EquipmentKitLine ассоциация -many2one- Equipment
При редактировании сущности EquipmentKit (добавлении элементов EquipmentKitLine) в момент сохранения изменений выдается ошибка как на скриншоте. Коммит записей в БД при этом происходит без ошибок и в последствии экземпляр сущности EquipmentKit открывается нормально. Ошибка может проявляться не всегда, иногда сохранение сущности EquipmentKit происходит нормально.
public://attachments/9fba103a1d7798b935c7fc9cc7f73b04.png

test_project.zip (243.2K)

Unfetched attribute access error

9fba103a1d7798b935c7fc9cc7f73b04

1 симпатия

Судя по тексту ошибки необходимо включить атрибут equipmentGroup во View источника данных, но дело в том, что данный атрибут уже включен во view

Здравствуйте, Андрей.

Не могли бы вы поделиться лог-файлом app.log с вашей ошибкой и подробно описать порядок действий с сущностями, при котором возникает ошибка?

С уважением,
Даниил.

Здравствуйте, Даниил.
Странно, не могу воспроизвести проблему на тестовом проекте.

Тем не менее на разрабатываемом проекте ошибка сохраняется.
Стек-трейс:

2017-09-14 08:52:38 ERROR Exception in com.haulmont.cuba.web.toolkit.ui.CubaButton: com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:160)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:119)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:444)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:409)
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1436)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:385)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:301)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:192)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:108)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:95)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at com.haulmont.cuba.web.sys.singleapp.SingleAppWebContextLoader$SetClassLoaderFilter.doFilter(SingleAppWebContextLoader.java:228)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2521)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2510)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158)
    ... 39 more
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.haulmont.cuba.web.gui.components.WebButton$$Lambda$88/589038916 failed.
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1037)
    at com.vaadin.ui.Button.fireClick(Button.java:377)
    at com.haulmont.cuba.web.toolkit.ui.CubaButton.fireClick(CubaButton.java:54)
    at com.vaadin.ui.Button$1.click(Button.java:54)
    ... 43 more
Caused by: com.vaadin.ui.Table$CacheUpdateException: Error during Table cache update.
    at com.vaadin.ui.Table.maybeThrowCacheUpdateExceptions(Table.java:1802)
    at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1791)
    at com.vaadin.ui.Table.refreshRowCache(Table.java:2732)
    at com.vaadin.ui.Table.containerItemSetChange(Table.java:4661)
    at com.haulmont.cuba.web.gui.data.CollectionDsWrapper.fireItemSetChanged(CollectionDsWrapper.java:109)
    at com.haulmont.cuba.web.gui.data.CollectionDsWrapper$ContainerDatasourceCollectionChangeListener.collectionChanged(CollectionDsWrapper.java:270)
    at com.haulmont.bali.events.EventRouter.fireEvent(EventRouter.java:45)
    at com.haulmont.cuba.gui.data.impl.CollectionDsListenersWrapper.collectionChanged(CollectionDsListenersWrapper.java:53)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TableCollectionDsListenersWrapper.collectionChanged(WebAbstractTable.java:2982)
    at com.haulmont.cuba.gui.data.impl.WeakCollectionChangeListener.collectionChanged(WeakCollectionChangeListener.java:41)
    at com.haulmont.cuba.gui.data.impl.CollectionPropertyDatasourceImpl.fireCollectionChanged(CollectionPropertyDatasourceImpl.java:798)
    at com.haulmont.cuba.gui.data.impl.CollectionPropertyDatasourceImpl.committed(CollectionPropertyDatasourceImpl.java:770)
    at com.haulmont.cuba.gui.data.impl.DsContextImpl.notifyAllDsCommited(DsContextImpl.java:234)
    at com.haulmont.cuba.gui.data.impl.DsContextImpl.commit(DsContextImpl.java:170)
    at com.haulmont.cuba.gui.components.EditorWindowDelegate.commit(EditorWindowDelegate.java:281)
    at com.haulmont.cuba.web.gui.WebWindow$Editor.commitAndClose(WebWindow.java:1595)
    at com.haulmont.cuba.gui.components.AbstractEditor.commitAndClose(AbstractEditor.java:109)
    at com.haulmont.cuba.gui.components.EditorWindowDelegate$2.actionPerform(EditorWindowDelegate.java:101)
    at com.haulmont.cuba.web.gui.components.WebButton.performAction(WebButton.java:44)
    at com.haulmont.cuba.web.gui.components.WebButton.lambda$new$61446b05$1(WebButton.java:36)
    at sun.reflect.GeneratedMethodAccessor204.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
    ... 49 more
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.haulmont.chile.core.model.utils.MethodsCache.invokeGetter(MethodsCache.java:74)
    at com.haulmont.chile.core.model.impl.AbstractInstance.getValue(AbstractInstance.java:102)
    at com.haulmont.cuba.core.entity.BaseGenericIdEntity.getValue(BaseGenericIdEntity.java:151)
    at com.haulmont.chile.core.model.utils.InstanceUtils.getValueEx(InstanceUtils.java:139)
    at com.haulmont.cuba.web.gui.data.PropertyWrapper.getValue(PropertyWrapper.java:76)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TablePropertyWrapper.getValue(WebAbstractTable.java:1989)
    at com.haulmont.cuba.web.gui.data.PropertyWrapper.getFormattedValue(PropertyWrapper.java:149)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TablePropertyWrapper.getFormattedValue(WebAbstractTable.java:1975)
    at com.haulmont.cuba.web.toolkit.ui.CubaTable.formatPropertyValue(CubaTable.java:240)
    at com.haulmont.cuba.web.toolkit.ui.CubaTable.getPropertyValue(CubaTable.java:200)
    at com.vaadin.ui.Table.parseItemIdToCells(Table.java:2432)
    at com.vaadin.ui.Table.getVisibleCellsNoCache(Table.java:2282)
    at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1780)
    ... 71 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor275.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.haulmont.chile.core.model.utils.MethodsCache.invokeGetter(MethodsCache.java:72)
    ... 83 more
Caused by: Exception [EclipseLink-7242] (Eclipse Persistence Services - 2.6.2.cuba16): org.eclipse.persistence.exceptions.ValidationException
Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session.  This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that relationship is traversed after serialization.  To avoid this issue, instantiate the LAZY relationship prior to serialization.
    at org.eclipse.persistence.exceptions.ValidationException.instantiatingValueholderWithNullSession(ValidationException.java:1024)
    at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:233)
    at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:101)
    at ru.npc_springs.techbase.entity.equipment.BaseEquipment._persistence_get_group(BaseEquipment.java)
    at ru.npc_springs.techbase.entity.equipment.BaseEquipment.getGroup(BaseEquipment.java:112)
    ... 87 more

2017-09-14 08:33:42 ERROR Exception in com.haulmont.cuba.web.toolkit.ui.CubaButton: com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:160)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:119)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:444)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:409)
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1436)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:385)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:301)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:192)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:108)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:95)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at com.haulmont.cuba.web.sys.singleapp.SingleAppWebContextLoader$SetClassLoaderFilter.doFilter(SingleAppWebContextLoader.java:228)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2521)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2510)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158)
    ... 39 more
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.haulmont.cuba.web.gui.components.WebButton$$Lambda$88/589038916 failed.
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1037)
    at com.vaadin.ui.Button.fireClick(Button.java:377)
    at com.haulmont.cuba.web.toolkit.ui.CubaButton.fireClick(CubaButton.java:54)
    at com.vaadin.ui.Button$1.click(Button.java:54)
    ... 43 more
Caused by: com.vaadin.ui.Table$CacheUpdateException: Error during Table cache update.
    at com.vaadin.ui.Table.maybeThrowCacheUpdateExceptions(Table.java:1802)
    at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1791)
    at com.vaadin.ui.Table.refreshRowCache(Table.java:2732)
    at com.vaadin.ui.Table.containerItemSetChange(Table.java:4661)
    at com.haulmont.cuba.web.gui.data.CollectionDsWrapper.fireItemSetChanged(CollectionDsWrapper.java:109)
    at com.haulmont.cuba.web.gui.data.CollectionDsWrapper$ContainerDatasourceCollectionChangeListener.collectionChanged(CollectionDsWrapper.java:270)
    at com.haulmont.bali.events.EventRouter.fireEvent(EventRouter.java:45)
    at com.haulmont.cuba.gui.data.impl.CollectionDsListenersWrapper.collectionChanged(CollectionDsListenersWrapper.java:53)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TableCollectionDsListenersWrapper.collectionChanged(WebAbstractTable.java:2982)
    at com.haulmont.cuba.gui.data.impl.WeakCollectionChangeListener.collectionChanged(WeakCollectionChangeListener.java:41)
    at com.haulmont.cuba.gui.data.impl.CollectionPropertyDatasourceImpl.fireCollectionChanged(CollectionPropertyDatasourceImpl.java:798)
    at com.haulmont.cuba.gui.data.impl.CollectionPropertyDatasourceImpl.committed(CollectionPropertyDatasourceImpl.java:770)
    at com.haulmont.cuba.gui.data.impl.DsContextImpl.notifyAllDsCommited(DsContextImpl.java:234)
    at com.haulmont.cuba.gui.data.impl.DsContextImpl.commit(DsContextImpl.java:170)
    at com.haulmont.cuba.gui.components.EditorWindowDelegate.commit(EditorWindowDelegate.java:281)
    at com.haulmont.cuba.web.gui.WebWindow$Editor.commitAndClose(WebWindow.java:1595)
    at com.haulmont.cuba.gui.components.AbstractEditor.commitAndClose(AbstractEditor.java:109)
    at com.haulmont.cuba.gui.components.EditorWindowDelegate$2.actionPerform(EditorWindowDelegate.java:101)
    at com.haulmont.cuba.web.gui.components.WebButton.performAction(WebButton.java:44)
    at com.haulmont.cuba.web.gui.components.WebButton.lambda$new$61446b05$1(WebButton.java:36)
    at sun.reflect.GeneratedMethodAccessor204.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
    ... 49 more
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.haulmont.chile.core.model.utils.MethodsCache.invokeGetter(MethodsCache.java:74)
    at com.haulmont.chile.core.model.impl.AbstractInstance.getValue(AbstractInstance.java:102)
    at com.haulmont.cuba.core.entity.BaseGenericIdEntity.getValue(BaseGenericIdEntity.java:151)
    at com.haulmont.chile.core.model.utils.InstanceUtils.getValueEx(InstanceUtils.java:139)
    at com.haulmont.cuba.web.gui.data.PropertyWrapper.getValue(PropertyWrapper.java:76)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TablePropertyWrapper.getValue(WebAbstractTable.java:1989)
    at com.haulmont.cuba.web.gui.data.PropertyWrapper.getFormattedValue(PropertyWrapper.java:149)
    at com.haulmont.cuba.web.gui.components.WebAbstractTable$TablePropertyWrapper.getFormattedValue(WebAbstractTable.java:1975)
    at com.haulmont.cuba.web.toolkit.ui.CubaTable.formatPropertyValue(CubaTable.java:240)
    at com.haulmont.cuba.web.toolkit.ui.CubaTable.getPropertyValue(CubaTable.java:200)
    at com.vaadin.ui.Table.parseItemIdToCells(Table.java:2432)
    at com.vaadin.ui.Table.getVisibleCellsNoCache(Table.java:2282)
    at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1780)
    ... 71 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor275.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.haulmont.chile.core.model.utils.MethodsCache.invokeGetter(MethodsCache.java:72)
    ... 83 more
Caused by: Exception [EclipseLink-7242] (Eclipse Persistence Services - 2.6.2.cuba16): org.eclipse.persistence.exceptions.ValidationException
Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session.  This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that relationship is traversed after serialization.  To avoid this issue, instantiate the LAZY relationship prior to serialization.
    at org.eclipse.persistence.exceptions.ValidationException.instantiatingValueholderWithNullSession(ValidationException.java:1024)
    at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:233)
    at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:101)
    at ru.npc_springs.techbase.entity.equipment.BaseEquipment._persistence_get_group(BaseEquipment.java)
    at ru.npc_springs.techbase.entity.equipment.BaseEquipment.getGroup(BaseEquipment.java:112)
    ... 87 more

Скорее всего, что-то не так с данными, используемыми в вашем разрабатываемом проекте.

Попробуйте проследить, с какими сущностями возникает эта ошибка и посмотреть, что неправильно.

К сожалению, подобная ошибка возникает достаточно часто. Понятно, что она не воспроизводится.

Например, у меня сейчас такая. Атрибут включен во view, в сущность не грузится. После часовой пляски вокруг ошибки принял решение добавить в таблицу генерируемый столбец с reload нужных атрибутов. Данные оказались в порядке, после reload все загружено нормально.

Проект показать не могу, разве что через расшаренный экран (viber например).

Имхо что то не так в одной из служебных таблице cuba. Вот вопрос - как их все отключить?

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

С наилучшим пожеланиями,
Даниил.

Столкнулись с аналогичной проблемой на HSQL. Платформа 6.6.2
Атрибут во view присутствует, fetch=join (но пробовали все варианты).
В результате, на экране редактирования сущности видим сообщение о необходимости включить атрибут во во view.
В логе то же сообщение:
Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session. This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that relationship is traversed after serialization. To avoid this issue, instantiate the LAZY relationship prior to serialization.
Идем в Entity Inspector и на экране просмотра перечня экземпляров это сущности видим то же сообщение об ошибке. Под сообщением об ошибке видно, что столбец для атрибута, который почему-то не загружен, действительно пустой.
Дальше интереснее… Нажимаем кнопку"обновить" и ошибки нет, а атрибут волшебным образом читается.
Для данной сущности есть небольшой код в слушателе onBeforeDetach для заполнения неперсистентного атрибута.
Если поставить точку останова в слушателя и выполнить его по шагам, то ошибка с руганью на отсутствие атрибута во view не появляется ни в одном из экранов.
А вот если выполнять код слушателя не по шагам, а сразу продолжить выполнение после точки останова в первой строке кода - тогда как повезет. Возможно атрибут прочитается корректно, а возможно будет ошибка с требованием включить его во view.
Пробовали очистить проект, пересобрать - картина не меняется.
На небольшом фрагменте проекта воспроизвести ошибку не получается, а вот в боевом проекте где порядка 30 сущностный - ошибка то есть, то нет.

Не могли бы вы уточнить, про какие сущности и атрибуты в контексте тестового проекта идёт речь?

Всем здравствуйте.

Мы столкнулись с этой же ошибкой. Возможно корень проблемы лежит в том же месте, с которым столкнулись мы. Так же мы смогли создать тестовый пример (150,5 КБ) на котором она воспроизводится:

  1. Запустить приложение
  2. Зайти в экран Foos, создать один экземпляр Foo 0 и два экземпляра Bar 0.1, Bar 0.2. Сохранить.
  3. Открыть экран Bars и открыть редактор Bar 0.2
  4. Указать у экземпляра любого пользователя (поле User). Сохранить.
  5. Открыть экран Foos, редактировать Foo 0, в таблице выбрать Bar 0.2 нажать на красную кнопку.

Пояснения, что происходит.

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

Bar bar = barsGrid.getSingleSelected();
if (bar == null) {
    return;
}

bar = dataManager.reload(bar, "bar-edit");
barsDs.updateItem(bar);

Так как barsDs является CollectionPropertyDatasource, то при обновлении объект не заменяется, а копируются значения из источника (CollectionPropertyDatasourceImpl:603). Так как при копировании исходный объект содержит свойство user то проверка persistentAttributesLoadChecker.isLoaded(source, name) (MetadataTools:905) проходит и значение пытается поставиться в объект с меньшим представлением. Из-за того, что атрибут user не загружен у объекта с меньшим представлением, возникает ошибка.

Однако, эта ошибка должна была перехватиться (MetadataTools:913). Однако этого не происходит в следствие того, что исключение не ожидаемый IllegalStateException, а org.eclipse.persistence.exceptions.ValidationException. Для того, чтобы кинуть “правильное” исключение IllegalStateException есть специальная модификация в eclipselink’е org.eclipse.persistence.internal.indirection.DatabaseValueHolder.java:93. Однако условие, необходимое для срабатывания не работает.

В результате мы выяснили, что подобное происходит тогда, когда FetchGroupManager использует LoadGroup вместо FetchGroup. Это в свою очередь было из-за того, что в представлении loadPartialEntities являлся false. В свою очередь это было из-за того, что в методе com.haulmont.cuba.core.app.RdbmsStore#createRestrictedView не срабатывает условие:

if (context.isLoadPartialEntities()
        && !needToApplyInMemoryReadConstraints(context)
        && !needToApplyAttributeAccess(context)) {
    copy.setLoadPartialEntities(true);
}

Конкретно needToApplyAttributeAccess(context) возвращал true. В следствие этого сущности грузились не так, как их ожидали. В результате чего эта ошибка и возникала.

Изначально мы пытались построить преставление так, чтобы наши сущности грузились корректно, и сначала нам это упешно удавалось. Однако, потом возникла ситуация, где ввиду большого количества перекрестных ссылок и как следствие сложности подбора соответствующего представления, мы не смогли его подобрать. В итоге мы решили переопределить FetchGroupManager так, чтобы всегда использовался FetchGroup при загрузке.

Хотелось бы увидеть комментарии разработчиков по поводу опасности такого решения или предложить альтернативный способ решения этой проблемы.

1 симпатия

Здравствуйте,

  • needToApplyAttributeAccess(context) возвращает true в случае если для сущности настроен attribute access. В тестовом проекте настроен attribute access, соответственно не будет использовано partial view. При partial view возможны случай, когда при обращение к незагруженному аттрибуту из AttributeAccessHandler происходит перезагрузка сущности и все ее загруженные поля теряются.
  • по эксепшиону который описан выше, это бага MetadataTools.copy. ValidationException необходимо обрабатывать при копирование сущности так же как и IllegalStateException. Спасибо, что сообщили о проблеме.Тикет https://github.com/cuba-platform/cuba/issues/855
  • всегда использовать FetchGroup черевато проблемами. Именно для этого ввели понятие partial view и различная загрузка сущности через EntityManager и DataManager.