В нашем приложении у нас есть экран поиска с несколькими полями фильтра. Когда вы нажимаете кнопку поиска, выполняется запрос, который извлекает несколько результатов и перечисляет их в сетке.setMaxResults в JPA в сочетании с подключением fetch
Однако может быть много данных, поэтому мы хотим ограничить количество возвращенных результатов до 1000. Мы используем OpenJPA для сопоставления возвращаемых записей с нашими классами моделей и SQL-сервером в качестве механизма базы данных. Некоторое время я ограничил количество возвращаемых результатов, используя этот код:
return entityManager.createQuery(query).setMaxResults(1000).getResultList();
Это работало замечательно, пока я недавно добавил пару присоединяется к исходному запросу.
Предположим, например, что вы хотели бы получить 10 «Контакты». Каждый контакт имеет 5 адресов. Когда я выполнить следующий запрос:
select c from Contact c left join fetch c.address
Фактический запрос, который выполняется выбирает 50 записей (5 строк на контакт, 1 для каждого адреса). И это для 10 контактов.
и ограничить его до результатов и проверить запрос, который выполняется в базе данных, он переводится на «SELECT TOP 10 FROM ...».
Это означает, что 10 записей, а не 10 объектов. Поэтому в моем примере возвращенный список контактов будет содержать 2 контакта с их 5 адресами.
Так что это подводит меня к моему вопросу: что я могу сделать для обеспечения полных данных 10 объектов возвращается вместо первых 10 записей?