๐Ÿ‘จ‍๐Ÿ’ป ๊ฐœ๋ฐœ์ผ์ง€/๐Ÿ”จ ERROR FIX

'java.lang.Object org.hibernate.ScrollableResults.get(int)' ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ

HI_IH 2023. 5. 19.

๋ฌธ์ œ์ƒํ™ฉ

@Override
    public Optional<DayScheduleDetail> findDayWithSchedulesByDayId(Long dayId) {

        DayScheduleDetail dayScheduleDetail = query
                .from(day)
                .innerJoin(day.schedules, schedule)
                .where(day.id.eq(dayId))
                .orderBy(schedule.scheduleIndex.value.asc())
                .transform(groupBy(day.id).as(new QDayScheduleDetail(
                        day.id,
                        day.trip.id,
                        day.tripDate,
                        list(new QDayScheduleDetail_ScheduleSummary(
                                schedule.id,
                                schedule.title,
                                schedule.place.placeName,
                                schedule.place.coordinate.latitude,
                                schedule.place.coordinate.longitude
                        ))
                ))).get(dayId);

        return Optional.ofNullable(dayScheduleDetail);
    }

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋†“๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ค๋ณด๋‹ˆ, java.lang.Object org.hibernate.ScrollableResults.get(int) ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋งˆ์ฃผํ•˜๋Š” ์˜ค๋ฅ˜์ด๊ธฐ๋„ ํ•˜๊ณ , ๋ฌธ๋ฒ•์ ์ธ ์˜ค๋ฅ˜๋Š” ์•„๋‹ˆ์–ด์„œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

ํ•ด๊ฒฐ

QueryDSL์˜ ๋ฌธ๋ฒ•์ ์ธ ์˜ค๋ฅ˜๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฒ€์ƒ‰์„ ํ•ด๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜ ๋งํฌ(QueryDSL gitHub)์—์„œ ํ•ด๋‹น ์ด์Šˆ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/querydsl/querydsl/issues/3428

 

java.lang.NoSuchMethodError: 'java.lang.Object org.hibernate.ScrollableResults.get(int)' with Hibernate 6.1.5.Final · Issue #34

Observed vs. expected behavior Observed: Caused by: java.lang.NoSuchMethodError: 'java.lang.Object org.hibernate.ScrollableResults.get(int)' at deployment.acoset-server-ear.ear//com.querydsl.jpa.Sc...

github.com

์š”์•ฝํ•˜์ž๋ฉด QueryDSL ์„ ์‚ฌ์šฉํ•˜์—ฌ Spring Data JPA ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ QueryDSL 4.4.1 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (์ง€๊ธˆ ๋ฒ„์ „ 5.0.0์ธ๋ฐ ์™œ ์•„์ง๊นŒ์ง€ ์•ˆ ๊ณ ์นจ..?)

 

๋ฌธ์ œ๋Š” groupBy() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ orderBy() ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

1. QueryDSL ๋ฒ„์ „์„ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

2.์„ค์ •ํŒŒ์ผ์—์„œ JPAQueryFactory ๋นˆ ๋“ฑ๋ก์‹œ์— JPQLTemplates๋ฅผ JPQLTemplates.DEFAULT ๋กœ ๋งž์ถ”์–ด ์ฃผ๋Š” ๋ฐฉ๋ฒ•

 

๊ฐœ์ธ์ ์œผ๋กœ  ๋ฒ„์ „ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋Š” ๊ธฐ์กด์— ์ž‘์„ฑํ•ด๋†“์€ ์ฝ”๋“œ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๋ชจ๋ฅด๊ธฐ์— 2๋ฒˆ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager em;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(JPQLTemplates.DEFAULT ,em);
    }
}

 

 

 

๋Œ“๊ธ€