В очередной раз поймал: IllegalStateException: Cannot get unfetched attribute [name] from detached object

Добрый день!
Jmix version: 1.4.2
Jmix Studio plugin version: 1.4.3-222
IntelliJ version: IntelliJ IDEA 2022.2.3 (Community Edition)

Наткнулся на странную ошибку.
Собрал тестовый проект, но не получилось воспроизвести (все работает как часы), поэтому нужны идеи где и что посмотреть для решения проблемы.

Имеем:

  1. Сущность, например, Order (наследник базовой сущности через JOIN), у которой есть композиция Specification (наследник базовой сущности через JOIN).
  2. У Specification есть ассоциация на Nomenklature
  3. У Nomenklature ассоциация на тип AccountingType.
  4. Экран редактирования Order, в котором таблица для редактирования связанных Specification.
<data>
	<instance id="orderDc"
			  class="ru.company.spm.entity.Order">
		<fetchPlan extends="_base">
			<property name="specification">
				<property name="document" fetchPlan="_instance_name"/>
				<property name="nomenklature" fetchPlan="_base">
					<property name="accountingType" fetchPlan="_base"/>
				</property>
				<property name="quantity"/>
			</property>
		</fetchPlan>
		<loader/>
		<collection id="specificationDc" property="specification"/>
	</instance>
</data>

Колонки в таблице спецификации:

<columns>
	<column id="nomenklature"/>
	<column id="quantity"/>
	<column id="nomenklature.accountingType"/>
</columns>

Если в спецификацию добавлено где-то около 5 строк, то все рабоатет как часы.
Но если добавить больше строк, то при сохранении появляется ошибка:

com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
...
Caused by: java.lang.reflect.InvocationTargetException: null
...
Caused by: com.vaadin.v7.ui.Table$CacheUpdateException: Error during Table cache update.
...
Caused by: java.lang.IllegalStateException: Cannot get unfetched attribute [name] from detached object ru.company.spm.entity.AccountingType-4ab4d84a-527d-467b-b616-87f0e931a851 [detached].`

При этом сохранение происходит нормально, но окно редактора не закрывается.
Смотрел дебаггером обращение к AccountingType.getName() и у некоторых позиций значение есть, а для некоторых нет и при обращении появляется ошибка.
Полный трейс ошибки под спойлером

Спойлер

2023-02-06 17:22:08.871 ERROR 13184 — [nio-8080-exec-4] i.j.u.exception.DefaultExceptionHandler : Unhandled exception

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:157) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:442) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:407) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:275) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:83) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1636) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:465) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[javax.servlet-api-4.0.1.jar:4.0.1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at io.jmix.core.impl.logging.LogMdcFilter.doFilterInternal(LogMdcFilter.java:28) ~[jmix-core-1.4.2.jar:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:147) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.5.jar:5.7.5]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.6.jar:2.7.6]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.24.jar:5.3.24]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.69.jar:9.0.69]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
… 94 common frames omitted
Caused by: com.vaadin.v7.ui.Table$CacheUpdateException: Error during Table cache update.
at com.vaadin.v7.ui.Table.maybeThrowCacheUpdateExceptions(Table.java:1801) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.v7.ui.Table.refreshRenderedCells(Table.java:1790) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at io.jmix.ui.widget.JmixGroupTable.refreshRenderedCells(JmixGroupTable.java:736) ~[jmix-ui-1.4.2.jar:na]
at com.vaadin.v7.ui.Table.refreshRowCache(Table.java:2724) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at io.jmix.ui.widget.JmixTable.refreshRowCache(JmixTable.java:1156) ~[jmix-ui-1.4.2.jar:na]
at com.vaadin.v7.ui.Table.valueChange(Table.java:4309) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at io.jmix.ui.component.table.TableDataContainer.datasourceValueChanged(TableDataContainer.java:298) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.core.common.event.EventHub.publish(EventHub.java:170) ~[jmix-core-1.4.2.jar:na]
at io.jmix.ui.component.data.table.ContainerTableItems.containerItemPropertyChanged(ContainerTableItems.java:79) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.core.common.event.EventHub.publish(EventHub.java:170) ~[jmix-core-1.4.2.jar:na]
at io.jmix.ui.model.impl.InstanceContainerImpl.itemPropertyChanged(InstanceContainerImpl.java:182) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.CollectionContainerImpl.itemPropertyChanged(CollectionContainerImpl.java:231) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.core.entity.BaseEntityEntry.firePropertyChanged(BaseEntityEntry.java:198) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.impl.EntityInternals.fireListeners(EntityInternals.java:90) ~[jmix-core-1.4.2.jar:na]
at ru.company.spm.entity.Specification.setNomenklature(Specification.java:95) ~[main/:na]
at io.jmix.core.metamodel.model.utils.MethodsCache$SettersHolder.accept(MethodsCache.java:241) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.entity.BaseEntityEntry.setAttributeValue(BaseEntityEntry.java:104) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.entity.EntityValues.setValue(EntityValues.java:89) ~[jmix-core-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.setPropertyValue(DataContextImpl.java:347) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.mergeState(DataContextImpl.java:318) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.internalMerge(DataContextImpl.java:236) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.mergeList(DataContextImpl.java:431) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.mergeState(DataContextImpl.java:309) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.internalMerge(DataContextImpl.java:236) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.mergeState(DataContextImpl.java:317) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.internalMerge(DataContextImpl.java:236) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.merge(DataContextImpl.java:180) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.merge(DataContextImpl.java:191) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.mergeCommitted(DataContextImpl.java:783) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.model.impl.DataContextImpl.commit(DataContextImpl.java:656) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.screen.StandardEditor.lambda$commitChanges$9(StandardEditor.java:427) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.screen.StandardEditor.commitChanges(StandardEditor.java:456) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.screen.StandardEditor.closeWithCommit(StandardEditor.java:617) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.screen.StandardEditor.commitAndClose(StandardEditor.java:571) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.core.common.event.EventHub.publish(EventHub.java:170) ~[jmix-core-1.4.2.jar:na]
at io.jmix.ui.action.BaseAction.actionPerform(BaseAction.java:220) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.component.impl.ButtonImpl.buttonClicked(ButtonImpl.java:75) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.widget.JmixButton.fireClick(JmixButton.java:77) ~[jmix-ui-1.4.2.jar:na]
at com.vaadin.ui.Button$1.click(Button.java:57) ~[vaadin-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
… 99 common frames omitted
Caused by: java.lang.IllegalStateException: Cannot get unfetched attribute [name] from detached object ru.company.spm.entity.AccountingType-4ab4d84a-527d-467b-b616-87f0e931a851 [detached].
at org.eclipse.persistence.internal.queries.EntityFetchGroup.onUnfetchedAttribute(EntityFetchGroup.java:100) ~[org.eclipse.persistence.core-2.7.9-6-jmix.jar:na]
at io.jmix.eclipselink.impl.JmixEntityFetchGroup.onUnfetchedAttribute(JmixEntityFetchGroup.java:78) ~[jmix-eclipselink-1.4.2.jar:na]
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.processUnfetchedAttribute(EntityManagerImpl.java:3027) ~[org.eclipse.persistence.jpa-2.7.9-6-jmix.jar:na]
at ru.company.spm.entity.AccountingType._persistence_checkFetched(AccountingType.java) ~[main/:na]
at ru.company.spm.entity.AccountingType._persistence_get_name(AccountingType.java) ~[main/:na]
at ru.company.spm.entity.AccountingType.getName(AccountingType.java:89) ~[main/:na]
at io.jmix.core.entity.BaseEntityEntry.getAttributeValue(BaseEntityEntry.java:85) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.entity.EntityValues.getValue(EntityValues.java:100) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.impl.InstanceNameProviderImpl.getInstanceName(InstanceNameProviderImpl.java:141) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.MetadataTools.getInstanceName(MetadataTools.java:213) ~[jmix-core-1.4.2.jar:na]
at io.jmix.core.MetadataTools.format(MetadataTools.java:156) ~[jmix-core-1.4.2.jar:na]
at io.jmix.ui.component.impl.AbstractTable.formatCellValue(AbstractTable.java:1269) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.widget.JmixTable.formatPropertyValue(JmixTable.java:345) ~[jmix-ui-1.4.2.jar:na]
at io.jmix.ui.widget.JmixTable.getPropertyValue(JmixTable.java:260) ~[jmix-ui-1.4.2.jar:na]
at com.vaadin.v7.ui.Table.parseItemIdToCells(Table.java:2396) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.v7.ui.Table.getVisibleCellsNoCache(Table.java:2240) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
at com.vaadin.v7.ui.Table.refreshRenderedCells(Table.java:1783) ~[vaadin-compatibility-server-8.14.3-0-jmix.jar:8.14.3-0-jmix]
… 136 common frames omitted

Дополню:
Описанная выше проблема возникает при обновлении кэша таблицы, если строки спецификации были добавлены программно:

  Specification spec = dataContext.create(Specification.class);
  spec.setDocument(orderDc.getItem());
  spec.setNomenklature(remains.getNomenklature());
  spec.setQuantity(remains.getQuantity());
  specificationDc.getMutableItems().add(spec);

В этом случае при перезагрузке сущности и её ассоциаций формируется такой запрос:

SELECT ID, DELETED_BY, DELETED_DATE, VERSION
FROM ACCOUNTING_TYPE 
WHERE ((ID = ?) AND (0=0))

т.е. запрашивается только часть системных атрибутов.

а если сущность спецификации добавлялась вручную через действие Создать и экран редактирования, то формируется нормальный sql запрос

SELECT ID, CREATED_BY, CREATED_DATE, DELETED_BY, DELETED_DATE, LAST_MODIFIED_BY, LAST_MODIFIED_DATE, NAME, VERSION 
FROM ACCOUNTING_TYPE 
WHERE ((ID = ?) AND (0=0))

Такое ощущение, что используется не тот фетч-план.

Подскажите, пожалуйста, где и что еще можно посмотреть?

1 симпатия

Подозреваю, момент в том, что вы создаете новый экземпляр прграммно, и добавляете ее в коллекцию Изменяемых сущностей (specificationDc.getMutableItems().add(spec)) не добавив предварительно новый экземпляр в контекст экрана.
И при этом еще ссылочные атрибуты этой новой сущности получают значение явно из контекста экрана (spec.setDocument(orderDc.getItem()) и т.д.).

Попробуйте сделать так:

@Autowired
private Metadata metadata;
@Autowired
private DataContext dataContext;

...

  Specification spec = metadata.create(Specification.class); //Все же, рекомендуется создавать так в общем случае
  spec.setDocument(orderDc.getItem());
  spec.setNomenklature(remains.getNomenklature());
  spec.setQuantity(remains.getQuantity());
  //Добавляем в контекст экрана
  Specification tracketSpec = dataContext.merge(spec);
  //И уже отслеживаемый экземпляр помещаем в изменяемую коллекцию экрана
  specificationDc.getMutableItems().add(tracketSpec);

image
только такие эмоции :slight_smile:

@andrey_vb Андрей, спасибо! Так Заработало.
Странно конечно, ведь я сразу создавал сущность в контексте экрана и на 4-5 строках все работало. Видимо это какой-то баг, который воспроизвести сложно.

Вообще, dataContext.create должен был создать сразу отслеживаемую в контексте экрана сущность.
Может быть, как-то сказывается какая-то тонкость в конструкции вашего экрана, которой не видно по приведенным фрагментам.

  Specification spec = dataContext.create(Specification.class);
  spec.setDocument(orderDc.getItem());
  spec.setNomenklature(remains.getNomenklature());
  spec.setQuantity(remains.getQuantity());
  specificationDc.getMutableItems().add(spec);

remains передается из другого экрана. Возможно в этом проблема.

Если тот другой экран открывается независимо и его контекст экрана не является дочерним по отношению к контексту экрана Order - в принципе все логично.
По сути вы прописываете в ссылочный атрибут nomenklature экземпляр сущности с из другого независимого контекста экрана (remains.getNomenklature()) и не мерджите итоговую “составную сущность” в контекст текущего экрана.

1 симпатия