Атрибут многие-к-одному не учитывает тип сущности

Добавлены атрибуты ассоциация один-ко-многим.
image

Все три сущности унаследованы от Activity. Стратегия single table. Проблема заключается в том, что при формировании sql не учитывается тип сущности атрибута (дискриминатор).

Сделайте пожалуйста тестовый проект. Это сэкономит нам время на моделирование возможно несуществующей проблемы.

Да, Константин, вы как обычно правы. Имея одну проблему, я ошибочно экстраполировал ее.
Вот проект. Базу оставил внутри.
С датасорсами все хорошо:
image

А вот при выполнении такого запроса к БД;

select act1, act2 from inherit$Activity1 act1 left join act1.activities2 act2

Я получаю следующий результат:
image

Рассчитываю я получить одну строку. Да и собственно сущность с ид f42b3386-d3da-693d-4f61-4a28a316a346 не является экземпляром Activity2 (она Activity3).

Возможно я неправильно использую jpql…

inherit.7z (143,1 КБ)

EclipseLink ORM не может в данном случае корректно обработать запрос JPQL, поскольку используется одно и тоже mappedProperty для двух разных коллекций, да и сущности все используют SINGLE_TABLE стратегию наследования. Решить данную проблему каким то фиксом в платформе или EclipseLink не получится.
Единственно возможное решение это указывать тип напрямую в JPQL запросе:

select act1, act2 from inherit$Activity1 act1 left join act1.activities2 act2 where TYPE(act2) = inherit$Activity2

Андрей, а так допустимо? В документации написано, что не должно работать.
image

Если будет другой тип наследования, будет работать корректно?

Да, должно работать. Я проверил запрос.

1 симпатия

Я думаю будет работать. Основная проблема в том, что все данные лежат в одной таблице и EclipseLink не добавляет в запрос условия по дискриминанту

1 симпатия