Я работаю над задачей настройки производительности, в которой я обнаружил, что запросы 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 в качестве базы данных.
Любая помощь по этому вопросу высоко ценится