Вы можете начать организовывать СОЕДИНЕНИЯ.Когда вы используете сложное «крушение поезда» среди сущностей на JPQL (например, entity1.entity2.entity3.name
), Hibernate может генерировать странные (иногда недопустимые) SQL.
Во-первых, запрос может быть:
SELECT DISTINCT new it.homepackage.models.document.DocumentGetReviewCommand(" +
"author.firstname, author.lastname, d.id, d.title, d.description, documentType.title, d.submissionDate)" +
" FROM Document d" +
" JOIN d.author author " +
" JOIN d.documentType documentType " +
" WHERE d.documentType IN :docTypes" +
" AND d.documentState = it.homepackage.enums.DocumentState.SUBMITTED" +
" AND :username <> author.username
Если запрос все еще медленный, возможно, причина в предложении IN
.IN
эквивалентно OR
.Множество itens в IN
означает большой OR
в SQL, что обычно трудно оптимизировать для базы данных.
Если запрос все еще медленный, второе место для поиска - DISTINCT
.DISTINCT
может иногда быть заменен на GROUP BY
для увеличения производительности.