Здравствуйте!
Попробовал перевести проект с версии Jmix 1.1 на версию Jmix 1.2. Перестали корректно работать JPQL-запросы, которые генерируются с помощью Row-Level Policy. У меня использовалась довольно нетривиальная конструкция для наложения условий на выборку данных:
Where Clause:
t.name in :current_user_tagsToRead and ({E}.restrictionTag1 is null or {E}.restrictionTag1 in :current_user_restriction1TagsToRead) and ({E}.restrictionTag2 is null or {E}.restrictionTag2 in :current_user_restriction2TagsToRead) and ({E}.restrictionTag3 is null or {E}.restrictionTag3 in :current_user_restriction3TagsToRead)
Join Clause:
,IN ({E}.tags) t
Вот какой запрос генерируется при выборе объекта по идентификатору в версии 1.1 (фрагмент лога):
2022-03-18 21:17:59.870 [Test worker] DEBUG i.j.e.i.JmixEclipseLinkQuery - select e from psbfs_PsbFile e, in(e.tags) t where (e.id = :_p1) and (t.name in :current_user_tagsToRead and (e.restrictionTag1 is null or e.restrictionTag1 in :current_user_restriction1TagsToRead) and (e.restrictionTag2 is null or e.restrictionTag2 in :current_user_restriction2TagsToRead) and (e.restrictionTag3 is null or e.restrictionTag3 in :current_user_restriction3TagsToRead))
2022-03-18 21:17:59.880 [Test worker] DEBUG i.j.e.i.FetchGroupManager - Fetch modes for ru.psbank.psbfs.core.entity.PsbFile/: <none>
2022-03-18 21:17:59.881 [Test worker] DEBUG e.logging.sql - <t 1306893378, conn 584222573> SELECT t1.ID, t1.CHRONICLE_ID, t1.CREATED_BY, t1.CREATED_DATE, t1.DELETED_BY, t1.DELETED_DATE, t1.DESCRIPTION, t1.EXTERNAL_ID, t1.LAST_MODIFIED_BY, t1.LAST_MODIFIED_DATE, t1.LAST_VERSION, t1.NAME, t1.SOURCE_SYSTEM, t1.VERSION, t1.CONTENT_ID, t1.RESTRICTION_TAG_1, t1.RESTRICTION_TAG_2, t1.RESTRICTION_TAG_3 FROM PSB_FILE_TAG t0, PSB_FILE_TAG_LINK t2, PSB_FILE t1 WHERE ((((t1.ID = ?) AND ((((t0.NAME IN (?,?)) AND ((t1.RESTRICTION_TAG_1 IS NULL) OR (t1.RESTRICTION_TAG_1 IN (?,?)))) AND ((t1.RESTRICTION_TAG_2 IS NULL) OR (t1.RESTRICTION_TAG_2 IN (?)))) AND ((t1.RESTRICTION_TAG_3 IS NULL) OR (t1.RESTRICTION_TAG_3 IN (?))))) AND (t1.DELETED_DATE IS NULL)) AND (((t2.FILE_ID = t1.ID) AND (t0.ID = t2.TAG_ID)) AND (t0.DELETED_DATE IS NULL)))
bind => [b41bd243-d6de-d8cd-630e-83abcfac8369, T1, T2, 4, 103, 104, 105]
Объект нормально считывается.
И вот аналогичный фрагмент лога при выборе объекта по идентификатору в версии 1.2:
2022-03-18 20:53:19.418 [Test worker] DEBUG i.j.e.i.JmixEclipseLinkQuery - select e from psbfs_PsbFile e, in(e.tags) t where (e.id = :_p1) and (t.name in :current_user_tagsToRead and (e.restrictionTag1 is null or e.restrictionTag1 in :current_user_restriction1TagsToRead) and (e.restrictionTag2 is null or e.restrictionTag2 in :current_user_restriction2TagsToRead) and (e.restrictionTag3 is null or e.restrictionTag3 in :current_user_restriction3TagsToRead))
2022-03-18 20:53:19.433 [Test worker] DEBUG i.j.e.i.FetchGroupManager - Fetch modes for ru.psbank.psbfs.core.entity.PsbFile/: <none>
2022-03-18 20:53:19.434 [Test worker] DEBUG e.logging.sql - <t 130111210, conn 202153290> SELECT t1.ID, t1.CHRONICLE_ID, t1.CREATED_BY, t1.CREATED_DATE, t1.DELETED_BY, t1.DELETED_DATE, t1.DESCRIPTION, t1.EXTERNAL_ID, t1.LAST_MODIFIED_BY, t1.LAST_MODIFIED_DATE, t1.LAST_VERSION, t1.NAME, t1.SOURCE_SYSTEM, t1.VERSION, t1.CONTENT_ID, t1.RESTRICTION_TAG_1, t1.RESTRICTION_TAG_2, t1.RESTRICTION_TAG_3 FROM PSB_FILE_TAG t0, PSB_FILE_TAG_LINK t2, PSB_FILE t1 WHERE ((((t1.ID = '0f21e031-9321-83fb-36bf-759d9fa0e280') AND ((((1 = 0) AND ((t1.RESTRICTION_TAG_1 IS NULL) OR (1 = 0))) AND ((t1.RESTRICTION_TAG_2 IS NULL) OR (1 = 0))) AND ((t1.RESTRICTION_TAG_3 IS NULL) OR (1 = 0)))) AND (t1.DELETED_DATE IS NULL)) AND (((t2.FILE_ID = t1.ID) AND (t0.ID = t2.TAG_ID)) AND (t0.DELETED_DATE IS NULL)))
Объект не находится.