해결된 질문
작성
·
80
1
안녕하세요. 강의 잘 듣고있습니다.
다름이 아니라 subquery 실습 중 nullable method 처리가 안되어 질문 드립니다.
asTable() method 사용하여 Table<Record> 인스턴스 subTable 생성 후 subTable.field() method 호출 시 Nullable한 method이기 때문에 NPE 발생 가능 경고가 발생합니다.
서브쿼리가 아닌 generated된 객체의 경우에는 발생하지 않아 비슷한 방식으로 해결해보기 위해 구글링해보았지만 뚜렷한 해결방법이 나오지 않아서요.
특정 객체로 mapping 혹은 NPE 발생 가능성을 compile level에서 처리 가능하게끔 해결 가능할까요?
답변 1
0
actorList가 where절 서브쿼리입니다.
서브쿼리로 작성된 테이블의 field를 "abc"라는 이름으로 가져올 때, NPE 발생 가능성이 존재합니다.
위와 같이, field를 String으로 가져오는것이 아닌, 객체에 매핑된 형태로 사용 할 수 있는지요?
freesens님 안녕하세요. 질문주신부분 답변 해드리도록 하겠습니다.
이 부분은 정상동작이라고 생각됩니다.
서브쿼리의 경우, 컬럼이 고정 되어있지 않아 아래 사진과 같이 null 이 발생될 수 있습니다.
이부분이 우려가 된다면. lessThenIfNotNull등의 condition 처리 함수를 만들어서 래핑하면 될듯합니다.
Field 메서드의 주석 부분을 참고하시면 좋을듯합니다.
-- 해석
필드 참조를 통해 이 타입에 알려진 필드를 가져옵니다.
이 메서드는 다음을 반환합니다:
인수 필드와 동일한 필드
(객체 동일성 비교 기준)
인수 필드와 동일한 완전한 이름을 정확히 일치하는 필드
인수 필드와 동일한 부분적으로 일치하는 완전한 이름을 가진 필드
인수 필드의 비한정 이름과 동일한 이름을 가진 필드
그 외의 경우에는 null
만약 여러 필드가 동일한 모호한 이름을 가지고 있는 경우, 첫 번째 필드가 반환되며 경고가 기록됩니다.
아래처럼 테이블의 필드를 그대로 사용하는 경우 가능합니다.
추가로 Unsigned Integer(UInteger.class) 같은 경우 캐스팅이 부담이 되실 경우
forcedType을 통해 Long으로 매핑시킬수 있으니 참고 부탁드려요