JPA запускает N + 1 запросов на выборку при фиксации транзакции - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю над задачей настройки производительности, в которой я обнаружил, что запросы JPA N + 1 являются основной причиной проблемы производительности. Я изменил свой запрос, чтобы использовать JOIN FETCH для решения проблемы N + 1. Все отношения сущностей отображаются с помощью FetchType.LAZY для сопоставлений OneToMany и его однонаправленных, что означает, что я не установил ManyToOne для дочерней сущности.

Теперь один запрос JOIN запускается вместо N + 1. Но когда метод транзакционного ejb возвращается, неожиданно запускаются все запросы N + 1. Когда я выполнял отладку, я обнаружил одно поведение: если я изменяю границу транзакции, при выходе из этого метода транзакции запускается N + 1 запрос.

Я сталкиваюсь с этой проблемой уже два дня. Я очень устал, пытаясь всеми способами. Я пробовал критерии запроса, JPQL-запрос, удаленную транзакцию (которая вызывает другое исключение)

Я что-то пропустил? Поскольку N + 1 является довольно популярной проблемой и, конечно, решения также хорошо известны.

Я использую OpenJPA в качестве реализации (JPA2.1) и DB2 в качестве базы данных.

Любая помощь по этому вопросу высоко ценится

...