jpa insert시 default 값 적용

개발하는 구황작물·2022년 9월 24일
0

메인 프로젝트

목록 보기
1/10

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 엔티티에 이벤트가 발생될 때마다 특정 로직을 실행시켜주는 어노테이션들이다.

  • @PrePersist : 새로운 엔티티에 대해 persist 되기 전 호출
  • @PreUpdate : 엔티티 업데이트 작업 전 호출
  • @PreRemove : 엔티티가 제거되기 전 호출
  • @PostPersist : 새로운 엔티티에 대해 persist 이후 호출
  • @PostUpdate : 엔티티가 업데이트된 후 호출
  • @PostRemove : 엔티티가 삭제된 후 호출
  • @PostLoad : Select조회가 일어난 직후에 호출
profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글