Обмен сопоставлением таблицы объектов во время выполнения с помощью Eclipselink

#jpa #mapping #entity #eclipselink

#jpa #сопоставление #объект #eclipselink

Вопрос:

Возможно ли изменить сопоставление таблицы сущностей во время выполнения с помощью Eclipselink? У меня есть отображение вида объекта, определенное с помощью аннотаций. Теперь у меня есть бизнес-требование: «Если эти представления пусты, попробуйте использовать базовую таблицу». Таким образом, я должен переключиться с представления на базовую таблицу.

Представление — это просто ВЫБОР в таблице с некоторыми ограничениями.

Ответ №1:

Когда вам нужно проверить, является ли представление пустым?

Если это можно выполнить один раз при запуске, вы могли бы просто поместить эту проверку в SessionCustomizer и изменить таблицу ClassDescriptor.

Если вам нужно делать это каждый раз, когда вы запрашиваете его, то это гораздо более странно. Вы могли бы определить MappedSuperclass и два подкласса, один из которых сопоставлен представлению, а другой — таблице, а затем решить в своем приложении, какой из них использовать.

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

Можно получить ClassDescriptor из сеанса во время выполнения и изменить его, но обычно это плохая идея, поскольку другие клиенты / потоки могут одновременно использовать дескриптор / сеанс.

Или просто всегда сопоставляйте таблицу и фильтруйте то, что имеет отношение к вашему запросу (или дополнительным критериям объединения), вместо использования представления.

Комментарии:

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