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)
)