2016-01-13 3 views
1

Я использую весенний ботинок и весенние данные JPA. Он отлично работает, но! Мне нужно использовать сложные исходные запросы из базы данных Oracle (исходные данные из SAP ERP).Данные о весне JPA, сложный родной Запрос

Позволяет сказать запрос, содержащий 5 перетасованных таблиц (один ключ или составной ключ). Я мог бы использовать множество параметров.

Решение:

1) Это нереально написать новый запрос с использованием JPA для этого запроса из-за времени. Создание всех ключевых отношений между таблицами кажется сложным.

2) Для выполнения этих запросов я использую JDBC. Это легко, потому что я подготовил собственный запрос. Но я убежден, что этот подход неверен.

Есть ли у вас какие-либо идеи о том, как использовать Spring data JPA для запуска очень сложных собственных запросов?

Спасибо за советы

ответ

0

Мое первое впечатление, что вы можете вернуться к модели данных. Объединение 5 таблиц может быть довольно дорогостоящим в ресурсах БД, и ваша модель данных может быть более пригодной для использования de-normalized.

Если модель данных похоронена в камне, и вы не хотите использовать JPQL для сложных запросов и не хотите использовать простой JDBC, я считаю, что у вас есть два варианта.

  1. Использование JPA criteria queries. Они немного похожи на Hibernate Criteria API, и на самом деле они предназначены для их замены. Я использовал только запросы JA6 на основе JEE6, и они иногда чувствовали себя немного неуклюжими. Не уверен, улучшилось ли это в JEE7.

  2. Вы можете использовать построители запросов нижнего уровня, такие как JOOQ или QueryDSL. Я считаю, что JOOQ выплачивается за Oracle. QueryDSL также имеет некоторую поддержку JPA, но не уверен, какая цель есть. Возможно, чтобы требования к критериям JPA были немного более пригодными для использования API.

Обе опции позволяют использовать для построения безопасных типов запросов с Java API, прикован, поэтому ваш запрос в Java коде не должно быть гораздо больше кода, чем обычный SQL.