project 진행 중 entity를 save() 할 경우 해당 테이블 컬럼의 값이 null로 저장되는 문제가 발생하였다.
처음에는 private Integer likesCount = 0;
처럼 해당 필드에 초깃값을 설정해주려 했으나 entity를 새로 생성 시 값이 다시 default값으로 되돌아 가기 때문에 실천하지는 않았다.
@Entity
@Getter
@NoArgsConstructor
public class Posts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "title", nullable = false)
private String title;
@Column(name = "content", nullable = false)
private String content;
@Column(name = "latitude", nullable = false)
private String latitude;
@Column(name = "longitude", nullable = false)
private String longitude;
@Column(name = "address", nullable = false)
private String address;
@Column(name = "detailAddress", nullable = false)
private String detailAddress;
@Column(name = "likesCount")
private Integer likesCount;
}
persist 되기 전 호출되는 @PrePersist를 사용하였다.
@PrePersist는 jpa 엔티티가 비영속 상태에서 영속상태가 되는 시점 이전에 실행되는 어노테이션이다.
@Entity
@Getter
@NoArgsConstructor
public class Posts {
@PrePersist //해결 방법
public void prePersist() {
this.likesCount = this.likesCount == null? 0:this.likesCount;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "title", nullable = false)
private String title;
....
@Column(name = "likesCount")
private Integer likesCount;
}
만약 likeCount가 null일 경우 0으로 설정해주는 메서드를 추가하고 @PrePersist를 붙여주었다.
결과
원래는 null로 표시가 되었으나 @PrePersist이후 default 값이 0으로 변한 것을 볼 수 있다.
+)prepersist는 ENTITY당 하나만 생성이 가능하다
아래는 @PrePersist같이 jpa 엔티티에 이벤트가 발생될 때마다 특정 로직을 실행시켜주는 어노테이션들이다.