본문 바로가기
IT/JPA

[JPA] null value was assigned to a property of primitive type setter of

by 최고영회 2019. 11. 14.
728x90
반응형
SMALL

[문제]

- JPA를 통해 Insert 시 set 하지 않은 변수에 대해서는 Null 로 Insert 가 됨

- JPA를 통해 조회 시 int 형 변수에 대해서 NULL 값을 set 할 수 없다는 오류 발생

- Table Script 를 수정하여 NOT NULL DEFAULT 0 으로 속성 변경,
  변수에도 @ColumnDefault(value = "0") 속성 추가 

- JPA를 통해 Insert 시 set 하지 않은 변수에 대해서 Null 로 Insert 를 시도하기 때문에 Insert 시 오류 (Not Null)

 

[해결]

 - 방법1. @PrePersist Annotation 이용 
   Entity Manager에서 persist 하기 바로 직전에 수행시킬 수 있는 method 정의 가능

@PrePersist
public void prePersist() {
  if (this.sql == null) {
    this.sql = "";
  }
}

   위 방법으로 persist 하기 전에 오류 발생할 수 있는 변수들에 대하여 null 체크 후 기본값을 셋팅할 수 있다. 
   다만, int 형 변수의 경우 체크가 불가능하다. 

 - 방법2. int 형 변수를 Integer 로 변경 
   Integer 로 type 변경 시 실제 DB에 Null 이 있더라도 JPA 에서 매핑이 되며 Integer 변수에 Null 이 대응 된다. 
   다만, 해당 변수를 사용하는 모든곳에서 int 가 아닌 Integer 로의 처리가 필요하다. Null 처리를 꼭 해줘야 한다.

 - 방법3. @DynamicInsert @DynamicUpdate Annotation 이용 
   set 하지 않은 변수(Null)에 대해서 Insert, update 시 자동생성되는 SQL 에서 제외 되도록 하는 옵션
   개인적으로는 방법3을 추천, (상황에 따라서 방법1도 요긴하게 사용될 수 있다.)

 

null value was assigned to a property of primitive type setter of ... 해결

 

728x90
반응형
LIST