QueryDSL выборка объединяет запросы GROUP BY без группового - PullRequest
0 голосов
/ 07 января 2020

Я хочу охотно получить вложенные ассоциации с QueryDSL, используя выборочное соединение.

Этот запрос работает блестяще:

entityManager.createQuery("select player from Player player " +
                "left outer join fetch player.encryptions encryption " +
                "left outer join fetch encryption.result result " +
                "left outer join fetch encryption.question question " +
                "where player.nickName = :nickName ")
                .setParameter("nickName", nickName)
                .getSingleResult();

, но этот (написанный на QueryDSL)

queryFactory.from(qPlayer)
                .leftJoin(qPlayer.encryptions, qEncryption).fetchJoin()
                .leftJoin(qEncryption.result, qResult).fetchJoin()
                .leftJoin(qEncryption.question).fetchJoin()
                .where(qPlayer.nickName.eq(nickName))
                .select(Projections.constructor(PlayerScore.class, qPlayer, qResult.pointsAmount.sum()))
                .fetchOne();

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

Чтобы быть более точным c, запрос QueryDSL падает с таким исключением:

ERROR: column "player0_.id" must appear in the GROUP BY clause or be used in an aggregate function

Эти два фрагмента кода генерируют несколько разные SQL запросы. QueryDSL имеет два дополнительных фрагмента в предложении select:

select
player0_.id as col_0_0_,
sum(result2_.points_amount) as col_1_0_,
...

player0_.id продублирован, и я думаю, что это причина его сбоя. Я также думаю, что это ошибка QueryDSL.

...