db column은 not null로 되어 있는데 kotlin에서 pojo가 다 nullable로 생성되요.
kotlin을 사용하고 있어서, kotlin with jooq로 하는데 pojo의 속성들이 모두 ?이 붙어서 nullable이 되었습니다. 실상은 not null임에도 불구하고요. 이럴 경우 따로 data class를 만들어야 할까요? 아니면 다른 방법이 있을까요?
Answer 1
1
문서: https://www.jooq.org/doc/latest/manual/code-generation/kotlingenerator/
버터플라잉교육용 님 안녕하세요.
해당 부분 KotlinGenerator에서 옵션으로 지원되고 있습니다.
다만 원하시는 옵션의 default가 false여서 nullable로 처리되어있습니다.
KotlinNotNullPojoAttributes 옵션을 true로 변경하시면 됩니다.
해당 부분 강의자료에 추가해놓았으니 참고하시면 좋을듯합니다.
감사합니다.
https://github.com/SightStudio/jOOQ-inflearn/tree/main/issue_1314279_jooq-with-kotlin
다만 PK는 원하는 대로 not null 이 되지 않을 수 있는데요.
관련 이슈
https://github.com/jOOQ/jOOQ/issues/16007
이 부분이 마음에 들지 않는다면 이런 방법도 있습니다.
https://www.jooq.org/doc/latest/manual/code-generation/codegen-version-control/
POJO는 일회성 generator용도로만 생성하고 버전관리를 하는 방식입니다.
이 문서를 보면 POJO만 별도로 다른 패키지에서 생성되게 할 수 있습니다.
이를 통해 POJO를 다른 곳에서 생성되게하여 git으로 버전관리 하게 할 수 있습니다.
이렇게 하면 우리가 POJO 관리하게되니 좀 더 편하게 사용 할 수 있습니다.
대신 테이블에 대한 변경도 우리가 기존 마이바티스에서 했듯이 수동 필드들을 관리줘야합니다. (트레이드 오프)
0
main 외부에 생성된 generated 모듈은 git에서 제외를 하나 보군요? 그럼 협력 개발자들은 git pull을 당기고 난 후 항상 generate*DbJooq task를 실행해줘서 생성을 해야 겠네요??
그리고 github action 등으로 CICD 할 때도 job step에 빌드 cmd 전에 generate*DbJooq cmd를 추가해주고요.
반대로 pojo를 개발자가 통제하고 싶을 땐 다른 패키지에서 별도로 생성하고 git version 관리를 하고요
2
generate된 DSL은 깃으로 관리하지 않는가?
네 보통 git에서 제외하고 협력개발자들 각자 로컬에서 테스크 실행해서 생성하고 개발합니다.
이를 통해 원본 스키마에 대응하는 일관된 DSL을 가지고 개발을 합니다.
이렇게 되어야 원본 스키마가 변경되었을때 (DDL, 개발DB, JPA 엔티티 등) 생성된 DSL을 일관되게 관리 할 수 있고, 다른 부분을 런타임이 아닌 컴파일 타임에 확인 할 수 있습니다.
CI/CD 환경에서 generate*DbJooq 테스크를 별도로 추가 할 필요는 없습니다. 빌드시 자동으로 실행됩니다.
이를 통해 CI 환경에서 원본 스키마와 DSL이 다를 때 컴파일 에러를 발생시켜 개발자가 인지 할 수 있게합니다.
강의에 설명드린 DSL 생성 방식 (개발 DB, JPA엔티티, testcontainer + flyway)
모두 최초 도입자가 세팅만 해놓으면 협력하는 개발자들이 쉽게 생성할 수 있기 때문에 큰 부담은 없습니다.
반대로 pojo를 개발자가 통제하고 싶을 땐 다른 패키지에서 별도로 생성하고 git version 관리를 하고요.
-> 맞습니다.
저는 보통 1번을 선호하는 편이지만 2번도 틀린 방식은 아니기 때문에 팀내 상황을 잘 고려하시고 판단하시면 좋을듯합니다.
참고로 최근에 jOOQ 창시자가 이 주제에 관련해서 트위터에 유저들의 의견을 물은적이 있는데요.
이 포스트도 참고해보는게 결정에 도움이 될듯합니다
https://x.com/lukaseder/status/1805209257295393167
안녕하세요 FetchGroups에서 Multiset방식 사용하면 어떤가 해서 물어봅니다
0
60
1
monosoul jooq plugin-docker registry 변경
1
101
3
질문) jOOQ 프로젝트에서 CI/CD 자동화 문의
1
176
3
generate dao 를 통한 삽입 시 pk auto-increment 가 적용되지 않습니다
1
109
1
jooq+flyway에서 질문드립니다
0
249
2
안녕하세요 생성일,생성자,수정일,수정자는 자동으로 해주는 기능이 있을까요?
0
209
2
[사례] Maven에서 TestContainers 플러그인 적용시 예외발생
0
143
0
Routines 관련 질문
1
159
2
JOOQ 환경설정 중에 db 패스워드 관련 질문입니다.
1
173
1
Sakila DB 도커 컴포즈 구성 시 팁
1
152
1
DB 벤더별 내장함수에 대한 방언 지원 듣고 질문드려요
1
176
1
인텔리제이 테마 질문
2
426
3
kotlin jOOQ , 컴파일시 힙메모리 부족
0
525
2
pojo 에 setter 가 없는 경우가 있을까요?
1
189
1
FilmWithActor로 fetch 시 select와 생성자의 매개변수 순서가 다를 경우 map이 정상적으로 이루어 지지않는 케이스
1
228
1
from절 subquery table filed nullable 처리
1
221
1
kotlin mapping error
0
517
4
하나의 디비를 여러 백엔드 서버가 필요로 할 때, flyway 관리
1
889
5
dslContext 작성 시 fetchGroups 이렇게 작성해도 될까요?
2
639
6
update with dto 질문
1
268
1
R2DBC 환경에서 jOOQ generate 된 Dao를 사용할 수 있는 방법이 있을까요?
2
1245
3
IDE로 스프링부트 실행없이 jooq로 짠 쿼리 결과를 바로 확인하는 방법이 있을까요?
1
503
1
build.gradle.kts
3
758
2
마리아 DB 쓰시는분들은 mysql 파일 쓰시면됩니다.
1
371
1

