Фильтр в папке поиска не работает, если задействован ссылочный атрибут, в @NamePattern которого добавлены атрибуты, кроме локальных

После обновления решения c 6.10.9 на 7.0.7 у пользователей перестали работать некоторые папки поиска.
Если в условиях фильтра участвует ссылочный атрибут в @NamePattern которого включены атрибуты кроме локальных, получает ошибку: IllegalStateException: Cannot get unfetched attribute [XXXX] from detached object.
Воспроизвел на тестовом проекте в котором есть сущность

public class Order extends StandardEntity {
    private static final long serialVersionUID = -7917910753843910195L;

    @Column(name = "SUM_")
    protected Double sum;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "DOC_GROUP_ID")
    protected SalesDocGroup docGroup;
....
}

У SalesDocGroup InstanceName участвует локальный и ссылочный атрибуты:

@NamePattern("%s-%s|name,owner") // owner должен быть включен в _minimal
@Table(name = "FILTERUNFETCHED_SALES_DOC_GROUP")
@Entity(name = "filterunfetched_SalesDocGroup")
public class SalesDocGroup extends StandardEntity {
    private static final long serialVersionUID = 3076387124792345740L;

    @Column(name = "NAME")
    protected String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OWNER_ID")
    protected Contragent owner;
...
}

В основных элементах UI все хорошо
image

Если сделать фильтр на экране OrderBrowse по атрибуту SalesDocGroup, то в компоненте фильтра на экране все работает
image
Но если сохранить этот фильтр как папку поиска, то при попытке ей воспользоваться получим ошибку: IllegalStateException: Cannot get unfetched attribute [owner] from detached object com.company.filterunfetched.entity.SalesDocGroup-c586fe0b-e16a-66a0-f61f-17e05d47898a [detached].

Сведения
java.lang.IllegalStateException: Cannot get unfetched attribute [owner] from detached object com.company.filterunfetched.entity.SalesDocGroup-c586fe0b-e16a-66a0-f61f-17e05d47898a [detached].
	at org.eclipse.persistence.internal.queries.EntityFetchGroup.onUnfetchedAttribute(EntityFetchGroup.java:100)
	at com.haulmont.cuba.core.sys.persistence.CubaEntityFetchGroup.onUnfetchedAttribute(CubaEntityFetchGroup.java:74)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.processUnfetchedAttribute(EntityManagerImpl.java:2998)
	at com.haulmont.chile.core.model.impl.AbstractInstance._persistence_checkFetched(AbstractInstance.java)
	at com.company.filterunfetched.entity.SalesDocGroup._persistence_get_owner(SalesDocGroup.java)
	at com.company.filterunfetched.entity.SalesDocGroup.getOwner(SalesDocGroup.java:22)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.haulmont.chile.core.model.utils.MethodsCache.invokeGetter(MethodsCache.java:71)
	at com.haulmont.chile.core.model.impl.AbstractInstance.getValue(AbstractInstance.java:96)
	at com.haulmont.cuba.core.entity.BaseGenericIdEntity.getValue(BaseGenericIdEntity.java:146)
	at com.haulmont.cuba.core.global.MetadataTools.getInstanceName(MetadataTools.java:215)
	at com.haulmont.cuba.core.global.MetadataTools.format(MetadataTools.java:167)
	at com.haulmont.cuba.web.gui.components.WebLookupPickerField.generateDefaultItemCaption(WebLookupPickerField.java:130)
	at com.haulmont.cuba.web.gui.components.WebLookupPickerField.generateItemCaption(WebLookupPickerField.java:142)
	at com.vaadin.ui.ComboBox.updateSelectedItemCaption(ComboBox.java:833)
	at com.vaadin.ui.ComboBox.updateSelectedItemState(ComboBox.java:825)
	at com.vaadin.ui.AbstractSingleSelect.setSelectedItem(AbstractSingleSelect.java:353)
	at com.vaadin.ui.AbstractSingleSelect.setSelectedItem(AbstractSingleSelect.java:117)
	at com.vaadin.ui.AbstractSingleSelect.setValue(AbstractSingleSelect.java:151)
	at com.haulmont.cuba.web.widgets.CubaComboBoxPickerField.doSetValue(CubaComboBoxPickerField.java:58)
	at com.vaadin.ui.AbstractField.setValue(AbstractField.java:140)
	at com.vaadin.ui.AbstractField.setValue(AbstractField.java:53)
	at com.haulmont.cuba.web.gui.components.WebAbstractValueComponent.setValueToPresentation(WebAbstractValueComponent.java:123)
	at com.haulmont.cuba.web.gui.components.WebAbstractValueComponent.setValue(WebAbstractValueComponent.java:95)
	at com.haulmont.cuba.web.gui.components.WebPickerField.setValue(WebPickerField.java:96)
	at com.haulmont.cuba.web.gui.components.WebPickerField.setValue(WebPickerField.java:57)
	at com.haulmont.cuba.gui.components.filter.Param.createEntityLookup(Param.java:925)
	at com.haulmont.cuba.gui.components.filter.Param.createEditComponent(Param.java:593)
	at com.haulmont.cuba.gui.components.filter.Param.createEditComponentForFilterValue(Param.java:568)
	at com.haulmont.cuba.gui.components.filter.ParamEditor.createParamEditLayout(ParamEditor.java:82)
	at com.haulmont.cuba.gui.components.filter.ParamEditor.<init>(ParamEditor.java:70)
	at com.haulmont.cuba.gui.components.filter.FilterDelegateImpl.createParamEditor(FilterDelegateImpl.java:1005)
	at com.haulmont.cuba.gui.components.filter.FilterDelegateImpl.recursivelyCreateConditionsLayout(FilterDelegateImpl.java:889)
	at com.haulmont.cuba.gui.components.filter.FilterDelegateImpl.fillConditionsLayout(FilterDelegateImpl.java:839)
	at com.haulmont.cuba.gui.components.filter.FilterDelegateImpl.setFilterEntity(FilterDelegateImpl.java:616)
	at com.haulmont.cuba.web.gui.components.WebFilter.setFilterEntity(WebFilter.java:83)
	at com.haulmont.cuba.web.app.folders.FoldersBean.openFolder(FoldersBean.java:107)
	at com.haulmont.cuba.web.app.folders.CubaFoldersPane.openFolder(CubaFoldersPane.java:628)
	at com.haulmont.cuba.web.app.folders.CubaFoldersPane$FolderClickListener.itemClick(CubaFoldersPane.java:711)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:496)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237)
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1041)
	at com.vaadin.ui.Tree.lambda$new$c61d0278$1(Tree.java:301)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:496)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237)
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1041)
	at com.vaadin.ui.Grid.access$500(Grid.java:144)
	at com.vaadin.ui.Grid$GridServerRpcImpl.itemClick(Grid.java:645)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

Тоже самое при попытке редактировать условия для атрибута docGroup (класса SalesDocGroup)
image

Тестовый проект в приложении.
FilterUnfetched.zip (81.4 КБ)

2 симпатии

Есть какой-то понятный горизонт решения проблемы?

Добрый день!

Спасибо за сообщение о проблеме и приложенный тестовый проект. У меня не получилось воспроизвести проблему, если просто сохранять подобный фильтр, но если сохранять его со значением, то проблема воспроизводится в том числе на экране-браузере. Для решения проблемы создана GitHub issue.

1 симпатия

В platform 7.0.9 проблема решена.