powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / spring data count fetch как ?
6 сообщений из 6, страница 1 из 1
spring data count fetch как ?
    #39400819
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

собственно сабж

вылез где не ждали :


что есть - обычный себе рапозиторий


использую метод

Код: java
1.
public Page<T> findAll(Specification<T> spec, Pageable pageable)




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


так работает :

Код: java
1.
public List<T> findAll(Specification<T> spec)



получаю такой вот sql

да в нем есть подтягивание из таблицы game через left outer join

в самом Specification - просто указано

root.fetch(ReceiptTemplate_.game ,JoinType.LEFT);

без него он для каждой записи будет тянуть отдельным запросом игру (такой каскад селектов к таблице game)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 select
        receipttem0_.id as id1_5_0_,
        game1_.id as id1_1_1_,
        receipttem0_.created_by as created_2_5_0_,
        receipttem0_.created_date as created_3_5_0_,
        receipttem0_.last_modified_by as last_mod4_5_0_,
        receipttem0_.last_modified_date as last_mod5_5_0_,
        receipttem0_.version as version6_5_0_,
        receipttem0_.commentary as commenta7_5_0_,
        receipttem0_.game_id as game_id12_5_0_,
        receipttem0_.min_date as min_date8_5_0_,
        receipttem0_.min_draw_id as min_draw9_5_0_,
        receipttem0_.state as state10_5_0_,
        receipttem0_.template_text as templat11_5_0_,
        game1_.arm_url as arm_url2_1_1_,
        game1_.product_id as product_3_1_1_,
        game1_.product_name as product_4_1_1_ 
    from
        receipt_template receipttem0_ 
    left outer join
        game game1_ 
            on receipttem0_.game_id=game1_.id 
    where
        receipttem0_.state in (
            'draft' , 'ready'
        )




а вот как spring data делает count для пейдинга

Код: plsql
1.
select count(generatedAlias0) from ru.arm.template.entities.ReceiptTemplate as generatedAlias0 left join fetch generatedAlias0.game as generatedAlias1 where generatedAlias0.state in (:param0, :param1)



полный лог ошибки :

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=generatedAlias1,role=ru.arm.template.entities.ReceiptTemplate.game,tableName=game,tableAlias=game1_,origin=receipt_template receipttem0_,columns={receipttem0_.game_id ,className=ru.arm.template.entities.Game}}] [select count(generatedAlias0) from ru.arm.template.entities.ReceiptTemplate as generatedAlias0 left join fetch generatedAlias0.game as generatedAlias1 where generatedAlias0.state in (:param0, :param1)]; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=generatedAlias1,role=ru.arm.template.entities.ReceiptTemplate.game,tableName=game,tableAlias=game1_,origin=receipt_template receipttem0_,columns={receipttem0_.game_id ,className=ru.arm.template.entities.Game}}] [select count(generatedAlias0) from ru.arm.template.entities.ReceiptTemplate as generatedAlias0 left join fetch generatedAlias0.game as generatedAlias1 where generatedAlias0.state in (:param0, :param1)]



Что хочу - научить его делать корректный count для пейдинга вида

(ясно что в count совсем ненужны эти left outer join game!!!)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    select
      count(receipttem0_.id)
    from
        receipt_template receipttem0_ 
--     left outer join
--         game game1_ 
--             on receipttem0_.game_id=game1_.id 
    where
        receipttem0_.`state` in (
            'draft' , 'ready'
        );



вопрос как ?
...
Рейтинг: 0 / 0
spring data count fetch как ?
    #39400840
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел только это

http://stackoverflow.com/a/39659926/4458964

но это native
Код: java
1.
 @Query(countQuery = "")



где можно явно указать sql

а как быть со спецификацией ?
...
Рейтинг: 0 / 0
spring data count fetch как ?
    #39400849
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1нашел только это

http://stackoverflow.com/a/39659926/4458964

но это native
Код: java
1.
 @Query(countQuery = "")



где можно явно указать sql

а как быть со спецификацией ?

и тут


http://codingexplained.com/coding/java/spring-framework/fetch-query-not-working-spring-data-jpa-pageable


так если запрос сложный и динамический ? запрос с кучей опциональных параметров , для чего и пользуется спецификация !
...
Рейтинг: 0 / 0
spring data count fetch как ?
    #39401065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чему у тебя равен hibernate.dialect?
...
Рейтинг: 0 / 0
spring data count fetch как ?
    #39401110
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА чему у тебя равен hibernate.dialect?

Код: java
1.
 properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");




как я понял для запроса count()

Код: java
1.
2.
org.&#8203;springframework.&#8203;data.&#8203;jpa.&#8203;repository.&#8203;JpaSpecificationExecutor
public long count(Specification<T> spec)



Задача с join не разрешима ... :(
...
Рейтинг: 0 / 0
spring data count fetch как ?
    #39401126
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин , сразу не увидел :

Код: java
1.
2.
3.
if (Long.class != query.getResultType()) {
					root.fetch(Person_.addresses);
				}


https://jira.spring.io/browse/DATAJPA-105
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / spring data count fetch как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]