DataLoader JPQL проблема загрузки данных, когда в условии связанная сущность

Добрый день. В проекте есть сущность Updates и UpdateTable, которая относится к Updates @ManyToOne.

На browse экране Updates выбираем запись и переходим к browse экрану UpdateTables, с передачей параметра updatesId (практически так же как описано здесь: https://doc.cuba-platform.com/manual-latest/gui_data_comp_param.html)

В дескрипторе экрана UpdateTables:

<data readOnly="true">
        <collection id="updateTablesDc"
                    class="com.tatikoma.fiasservice.entity.UpdateTable">
            <view extends="_local">
                <property name="update" view="_minimal"/>
            </view>
            <loader id="updateTablesDl">
                <query>
                    <![CDATA[select e from fiasservice_UpdateTable e where e.update.id = :updatesId]]>
                </query>
            </loader>
        </collection>
    </data>


При переходе на этот экран получаем ошибку:
com.haulmont.cuba.core.global.RemoteException:

com.haulmont.cuba.core.sys.jpql.JpqlSyntaxException: Errors found for input jpql:[select e from fiasservice_UpdateTable e where e.update.id = :updatesId]
CommonErrorNode [<unexpected: [@13,47:47=’.’,<68>,1:47], resync=e.update.id = :updatesId>]
at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:96)
at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

Предположили, что почему-то не подгружается связанная сущность Updates (не смотря на то что она Mandatory). Переписали запрос:

select e from fiasservice_UpdateTable e, fiasservice_Updates u where e IN(u.updateTables) and u.id = :updatesId

Заработало корректно.

Вопрос 1: Почему, казалось бы логичный запрос не отработал?
Вопрос 2: Заметил, что если поменять FetchType.LAZY на EAGER, при запуске в консоли отписывается:
EAGER fetch type detected for reference field update of entity UpdateTable; Set to LAZY.
Почему?

Сделайте запрос таким: “select e from fiasservice_UpdateTable e where e.update = :updatesEnity” и передавайте в качестве параметра нужную сущность, а не ID.

Вопрос 2: Заметил, что если поменять FetchType.LAZY на EAGER, при запуске в консоли отписывается:
EAGER fetch type detected for reference field update of entity UpdateTable; Set to LAZY.
Почему?

Приложении на базе CUBA политика загрузки связанной сущности определяется динамически на основе view. Поэтому, нужно использовать FetchType.LAZY.

Скорее всего дело в том, что название атрибута update совпадает с ключевым словом JPQL.

2 симпатии