Неверный запрос sql

Есть несколько сущностей:

  • Document image
  • Stock image
  • StockAccess image
    Отношения у всех - многие к одному.
    Нужно сделать вывод только тех документов, в которых упоминается только склад(ы), к которым у пользователя есть доступ.
    Пытался набросать что-то вроде такого запроса:
select e from tradesystem_Document e, tradesystem_StockAccess sa 
join e.stock_from_id sf 
join e.stock_to_id st 
join sa.stock
                    <condition>
                        <or>
                            <c:jpql>
                                <c:where>sa.user = :user</c:where>
                            </c:jpql>
                        </or>
                    </condition>

Не могли бы вы описать поточнее что не верно, из вопроса не очевидно. Или приложить тестовый проект который воспроизводит ошибку с описанием ожидаемого результата.

В моём случае нужно объединить вышеописанные таблицы и добавить условие - tradesystem_StockAccess.user = текущий пользователь.
У меня выводятся почему-то все записи из таблицы document, либо вылетает ошибка

JpqlSyntaxException: Errors found for input JPQL:[select e from tradesystem_Document e, tradesystem_StockAccess sa join e.stock_from_id sf join e.stock_to_id st join sa.stock]
No variable name found [Join variable: null]

Пример:
Есть пользователь agent, для него разрешенный склад это City Street 1 image
image
Соответственно, из трёх складов он должен видеть данные только об одном.
image
(Должен быть виден только последний документ)

Попробуйте что то вида:

select d from tradesystem_Document d left join tradesystem_Stock s on  (d.from = s.id or d.to = s.id) 
left join tradesystem_StockAccess a on a.stock = s.id) where a.user = :user
<data readOnly="true">
    <collection id="documentsDc"
                class="bz.its.tradesystem.entity.Document"
                view="document-view">
        <loader id="documentsDl">
            <query><![CDATA[select d from tradesystem_Document d left join tradesystem_Stock s on (d.stock_from_id = s.id or d.stock_to_id = s.id) left join tradesystem_StockAccess a on a.stock = s.id where a.user = :user]]></query>
        </loader>
    </collection>
</data>

Вылетает вот это:

SQLSyntaxErrorException: user lacks privilege or object not found: 
T6 in statement [SELECT LIMIT ? ? t1.ID AS a1, t1.DELETE_TS AS a2, t1.DELETED_BY AS a3, t1.VERSION AS a4, t1.CREATED_BY_ID AS a5, t1.STOCK_FROM_ID_ID AS a6, 
t1.STOCK_TO_ID_ID AS a7, t1.TYPE_ID_ID AS a8, t1.UPDATED_BY_ID AS a9, t0.ID AS a10, t0.DELETE_TS AS a11, t0.DELETED_BY AS a12, t0.LOGIN AS a13, t0.NAME AS a14, t0.VERSION AS a15, t2.ID AS a16, t2.ADDRESS AS a17, t2.DELETE_TS AS a18, t2.DELETED_BY AS a19, 
t2.VERSION AS a20, t3.ID AS a21, t3.ADDRESS AS a22, t3.DELETE_TS AS a23, t3.DELETED_BY AS a24, t3.VERSION AS a25, t4.ID AS a26, t4.DELETE_TS AS a27, t4.DELETED_BY AS a28, t4.NAME AS a29, t4.VERSION AS a30, t5.ID AS a31, t5.DELETE_TS AS a32, t5.DELETED_BY AS a33,
 t5.LOGIN AS a34, t5.NAME AS a35, t5.VERSION AS a36 FROM TRADESYSTEM_DOCUMENT t1 LEFT OUTER JOIN TRADESYSTEM_STOCK t6 ON ((t1.STOCK_FROM_ID_ID = t6.ID.t6.ID) OR (t1.STOCK_TO_ID_ID = t6.ID.t6.ID))
 LEFT OUTER JOIN TRADESYSTEM_STOCK_ACCESS t7 ON (t7.STOCK_ID = t6.ID.t6.ID) LEFT OUTER JOIN SEC_USER t0 ON (t0.ID = t1.CREATED_BY_ID) LEFT OUTER JOIN TRADESYSTEM_DOCUMENT_TYPE t4 ON (t4.ID = t1.TYPE_ID_ID) 
LEFT OUTER JOIN SEC_USER t5 ON (t5.ID = t1.UPDATED_BY_ID), TRADESYSTEM_STOCK t3, TRADESYSTEM_STOCK t2 WHERE (((t7.USER_ID = ?) AND (t1.DELETE_TS IS NULL)) 
AND ((((t6.DELETE_TS IS NULL) AND (t7.DELETE_TS IS NULL)) AND ((t2.ID = t1.STOCK_FROM_ID_ID) AND (t2.DELETE_TS IS NULL))) AND ((t3.ID = t1.STOCK_TO_ID_ID) AND (t3.DELETE_TS IS NULL))))]