inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 jOOQ! Type Safe SQL with Java

jOOQ-기본문법 - SELECT 절 (2)

FilmWithActor로 fetch 시 select와 생성자의 매개변수 순서가 다를 경우 map이 정상적으로 이루어 지지않는 케이스

해결된 질문

228

하디

작성한 질문수 2

1

안녕하세요 강의를 재밌게 수강하던 도중 궁금증이 생기어 질문 드립니다.

 

질문

select 의 row 매개변수의 순서와 FilmWithActor의 생성자 매개변수의 순서가 각 테이블 타입에 매칭되지 않을 경우 mapping이 정상적으로 이뤄지지 않는 현상이 있어

별도의 해결 방법이나 대안이 있는지 여쭙고 싶습니다.

 

dslContext.select(
            DSL.row(FILM.fields()),
            DSL.row(FILM_ACTOR.fields()),
            DSL.row(ACTOR.fields())
        ).from(FILM)
        .join(FILM_ACTOR)
            .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID))
        .join(ACTOR)
            .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID))
            .offset((page - 1) * pageSize)
            .limit(pageSize)
        .fetchInto(FilmWithActor.class);



public class FilmWithActor {

    private final Film film;
    private final FilmActor filmActor;
    private final Actor actor;

    public FilmWithActor(Film film, FilmActor filmActor, Actor actor) {
        this.film = film;
        this.filmActor = filmActor;
        this.actor = actor;
    }

// ...

 

dslContext.select(
            DSL.row(FILM.fields()),
            DSL.row(FILM_ACTOR.fields()),
            DSL.row(ACTOR.fields())
        ).from(FILM)
        .join(FILM_ACTOR)
            .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID))
        .join(ACTOR)
            .on(FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID))
            .offset((page - 1) * pageSize)
            .limit(pageSize)
        .fetchInto(FilmWithActor.class);



public class FilmWithActor {

    private final Film film;
    private final FilmActor filmActor;
    private final Actor actor;

    public FilmWithActor(Film film, Actor actor, FilmActor filmActor) {
        this.film = film;
        this.filmActor = filmActor;
        this.actor = actor;
    }

// ...

 

 

image.png


 

 

 

java sql spring-boot jooq dsl

답변 1

1

설동민

하디님 안녕하세요

강의에서는 일부 row를 그룹핑해서 다른 객체로 만들 수 있다는걸 보여주기 위해서 위의 방식으로 소개했었는데요.

 

테이블 자체를 select하는 경우에는 Tables as SelectField 방식으로 처리하는것을 추천드립니다. 🙂

테이블 객체를 field로 사용하는 경우 아래와 같이 mapping 할 때 테이블 명으로 매핑할 클래스 필드명을 찾아서 매칭해주기 때문에 순서를 고려하지 않으셔도 됩니다.

 

예시 1) 위의 "Table as SelectField"를 사용한 경우

스크린샷 2024-10-25 오후 7.25.24.png

 

예시 2) 강의의 DSL.row를 사용한 경우

image.png

 

강의오픈 후에 이부분 설명이 아쉽다고 생각해서 강의노트에 추가했었는데요.

이부분은 추후에 다른분들도 어떻게 잘 알 수 있을지 고민해보도록 하겠습니다.

 

테이블이 아닌경우 DSL.row()와 매퍼를 적절히 사용해주시면 됩니다.

dslContext.select(
         DSL.row(
             FILM.FILM_ID,
             FILM.TITLE,
             FILM.DESCRIPTION
         ).mapping(SimpleFilmInfo::new)
     )
     .from(FILM)
     .where(FILM.FILM_ID.eq(id))
     .fetchOneInto(SimpleFilmInfoWrapper.class);
// 

class SimpleFilmInfoWrapper {
    private SimpleFilmInfo simpleFilmInfo;
}

 

1

하디

깔끔한 답변 감사합니다

안녕하세요 FetchGroups에서 Multiset방식 사용하면 어떤가 해서 물어봅니다

0

60

1

monosoul jooq plugin-docker registry 변경

1

101

3

질문) jOOQ 프로젝트에서 CI/CD 자동화 문의

1

174

3

generate dao 를 통한 삽입 시 pk auto-increment 가 적용되지 않습니다

1

109

1

jooq+flyway에서 질문드립니다

0

249

2

안녕하세요 생성일,생성자,수정일,수정자는 자동으로 해주는 기능이 있을까요?

0

206

2

[사례] Maven에서 TestContainers 플러그인 적용시 예외발생

0

142

0

Routines 관련 질문

1

159

2

JOOQ 환경설정 중에 db 패스워드 관련 질문입니다.

1

173

1

Sakila DB 도커 컴포즈 구성 시 팁

1

152

1

DB 벤더별 내장함수에 대한 방언 지원 듣고 질문드려요

1

176

1

인텔리제이 테마 질문

2

425

3

kotlin jOOQ , 컴파일시 힙메모리 부족

0

523

2

pojo 에 setter 가 없는 경우가 있을까요?

1

189

1

from절 subquery table filed nullable 처리

1

221

1

kotlin mapping error

0

517

4

db column은 not null로 되어 있는데 kotlin에서 pojo가 다 nullable로 생성되요.

0

514

1

하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리

1

887

5

dslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?

2

638

6

update with dto 질문

1

268

1

R2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?

2

1244

3

IDE로 스프링부트 실행없이 jooq로 짠 쿼리 결과를 바로 확인하는 방법이 있을까요?

1

503

1

build.gradle.kts

3

757

2

마리아 DB 쓰시는분들은 mysql 파일 쓰시면됩니다.

1

371

1