[IntelliJ] Field 'created_at' doesn't have a default value

bada·2024년 10월 11일

Trouble Shooting

목록 보기
9/10

문제 상황 파악

category 테이블에 created_at 이라는 컬럼이 없는데 자꾸 이 컬럼의 값이 없다고 뜨면서 Postman API 테스트에 500 에러로 실패한다.


문제 발생 조건 파악

아무리 봐도 없는 컬럼인데 이상해서 연동된 DB를 새로고침하니 갑자기 created_atupdated_at이 떴다. 카테고리 엔티티 상에는 분명 없는데 말이다.

사실 처음에 카테고리엔티티가 BaseTimeEntity(created_atupdated_at를 필드로 가지는 기본 엔티티)를 상속받은 형태로 구성했는데 추후에 삭제한 적이 있다. 그런데 이게 인텔리제이와 Mysql 과의 연동에서 변화가 업데이트가 안되는 경우가 있다고 한다.

BaseTimeEntity를 상속받았던 이전 코드

@Entity
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Category extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private int dept;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn (name = "parent_id")
    private Category parent;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private List<Category> child = new ArrayList<>();

    @Builder
    public Category(Long id, String name, Category parent, List<Category> child) {
        this.id = id;
        this.name = name;
        this.dept = parent != null ? parent.getDept() + 1 : 1;
        this.parent = parent;
        this.child = child;
    }

BaseTimeEntity.java

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {

    @CreationTimestamp
    @Column(name = "created_at", nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
    private Timestamp createdAt;

    @UpdateTimestamp
    @Column(name = "updated_at", nullable = false, columnDefinition = "TIMESTAMP")
    private Timestamp updatedAt;
}

결과 검증, 해결

Mysql과 IntelliJ를 재실행했더니 해당 컬럼들이 사라졌다. Postman API 테스트에도 잘 작동하는 모습을 확인할 수 있었다. (허무;)

참고자료: stackoverflow

profile
하루 세번 목 당기기

0개의 댓글