인프런 커뮤니티 질문&답변

freesens님의 프로필 이미지
freesens

작성한 질문수

실전 jOOQ! Type Safe SQL with Java

EnumConverter 사용하여 Enum 매핑하기

from절 subquery table filed nullable 처리

해결된 질문

작성

·

80

1

안녕하세요. 강의 잘 듣고있습니다.

다름이 아니라 subquery 실습 중 nullable method 처리가 안되어 질문 드립니다.

 

asTable() method 사용하여 Table<Record> 인스턴스 subTable 생성 후 subTable.field() method 호출 시 Nullable한 method이기 때문에 NPE 발생 가능 경고가 발생합니다.

 

서브쿼리가 아닌 generated된 객체의 경우에는 발생하지 않아 비슷한 방식으로 해결해보기 위해 구글링해보았지만 뚜렷한 해결방법이 나오지 않아서요.

 

특정 객체로 mapping 혹은 NPE 발생 가능성을 compile level에서 처리 가능하게끔 해결 가능할까요?

답변 1

0

설동민님의 프로필 이미지
설동민
지식공유자

안녕하세요. 어떤상황인지 정확히 파악이 안되서 답변드리기가 어려운데요.

관련된 예시 코드나 사진이 있을까요?

freesens님의 프로필 이미지
freesens
질문자

image.png

 

freesens님의 프로필 이미지
freesens
질문자

actorList가 where절 서브쿼리입니다.

서브쿼리로 작성된 테이블의 field를 "abc"라는 이름으로 가져올 때, NPE 발생 가능성이 존재합니다.

위와 같이, field를 String으로 가져오는것이 아닌, 객체에 매핑된 형태로 사용 할 수 있는지요?

설동민님의 프로필 이미지
설동민
지식공유자

freesens님 안녕하세요. 질문주신부분 답변 해드리도록 하겠습니다.

 

1. 서브쿼리 필드에 대한 'may produce NPE .. ' 발생이슈

 

이 부분은 정상동작이라고 생각됩니다.

서브쿼리의 경우, 컬럼이 고정 되어있지 않아 아래 사진과 같이 null 이 발생될 수 있습니다.

이부분이 우려가 된다면. lessThenIfNotNull등의 condition 처리 함수를 만들어서 래핑하면 될듯합니다.

 

스크린샷 2024-09-14 오후 12.08.55.png

 

Field 메서드의 주석 부분을 참고하시면 좋을듯합니다.

스크린샷 2024-09-14 오후 12.12.12.png

 

-- 해석

필드 참조를 통해 이 타입에 알려진 필드를 가져옵니다.

이 메서드는 다음을 반환합니다:

  1. 인수 필드와 동일한 필드
    (객체 동일성 비교 기준)

  2. 인수 필드와 동일한 완전한 이름을 정확히 일치하는 필드

  3. 인수 필드와 동일한 부분적으로 일치하는 완전한 이름을 가진 필드

  4. 인수 필드의 비한정 이름과 동일한 이름을 가진 필드

  5. 그 외의 경우에는 null

만약 여러 필드가 동일한 모호한 이름을 가지고 있는 경우, 첫 번째 필드가 반환되며 경고가 기록됩니다.

 

2. field를 String으로 가져오는것이 아닌, 객체에 매핑된 형태로 사용

 

아래처럼 테이블의 필드를 그대로 사용하는 경우 가능합니다.

 

image.png

 

설동민님의 프로필 이미지
설동민
지식공유자

추가로 Unsigned Integer(UInteger.class) 같은 경우 캐스팅이 부담이 되실 경우

forcedType을 통해 Long으로 매핑시킬수 있으니 참고 부탁드려요

freesens님의 프로필 이미지
freesens

작성한 질문수

질문하기