Странное поведение genericFilter при использовании or-condition в загрузчике

Jmix version: 2.2.1
Jmix Studio plugin version: 2.2.3-241
IntelliJ version: IntelliJ IDEA 2024.1 (Ultimate Edition)

При использовании jpql-condition в загрузчике с корневым элементом <or>
предикаты genericFilter также начинают работать через оператор OR. Такое поведение не логично. Пример приложения: GitHub - Lood/jmix-issue-1764 фильтр в PostListView

Подробнее

загрузка данных:

<collection id="postsDc"
            class="com.company.ftest.entity.Post">
    <fetchPlan extends="_instance_name">
        <property name="author" fetchPlan="_instance_name"/>
    </fetchPlan>
    <loader id="postsDl" readOnly="true">
        <query>
            <![CDATA[select e from Post e]]>
            <condition>
                <or>
                    <c:jpql>
                        <c:where>e.author = :session_author</c:where>
                    </c:jpql>
                    <c:jpql>
                        <c:where>:session_author is null</c:where>
                    </c:jpql>
                </or>
            </condition>
        </query>
    </loader>
</collection>

при фильтрации через genericFilter по title like'%1%' формируется запрос:

SELECT 
  t1.ID AS a1, 
  t1.TITLE AS a2, 
  t1.AUTHOR_ID AS a3, 
  t0.ID AS a4, 
  t0.FIRST_NAME AS a5, 
  t0.LAST_NAME AS a6, 
  t0.USERNAME AS a7, 
  t0.VERSION AS a8 
FROM USER_ t0, POST t1 
WHERE (
  (
    (
      (t1.AUTHOR_ID = '8bc2142d-526c-cf60-956f-91726b564d55')  -- предикат из загрузчика 1
      OR (1 = 0) -- предикат из загрузчика 2
    ) OR LOWER(t1.TITLE) LIKE '%1%' -- предикат из фильтра лепится через OR
  ) 
  AND (t0.ID = t1.AUTHOR_ID)
)

Добрый день!

Это известная проблема, по ней существует задача: The JPQL filter can be misleading when used in a group filter · Issue #2949 · jmix-framework/jmix · GitHub

С уважением,
Дмитрий

На данный момент пока не пофиксили можно всё завернуть в <and>:

<collection id="postsDc"
            class="com.company.ftest.entity.Post">
    <fetchPlan extends="_instance_name">
        <property name="author" fetchPlan="_instance_name"/>
    </fetchPlan>
    <loader id="postsDl" readOnly="true">
        <query>
            <![CDATA[select e from Post e]]>
            <condition>
             <and>
                <or>
                    <c:jpql>
                        <c:where>e.author = :session_author</c:where>
                    </c:jpql>
                    <c:jpql>
                        <c:where>:session_author is null</c:where>
                    </c:jpql>
                </or>
             </and>
            </condition>
        </query>
    </loader>
</collection>

Выглядит странно, но работает как надо.

Добрый день, в задаче на мой взгляд несколько другая проблема описана. У Вас в примере JPQL-фильтр из компонента genericFilter, а у меня в примере условие в загрузчике в XML-дескрипторе, и скобки в запросе расставлены верно, но логический оператор не тот подставляется.