DB 테이블 삭제도 중요하다.

Pr_C1oser·2023년 10월 30일
0

테스트를 위해 아래의 코드를 생성 후 DB에 추가 했었다.

package com.yk.Motivation.domain.likeA.entity;

import com.yk.Motivation.base.jpa.baseEntity.BaseEntity;
import com.yk.Motivation.domain.article.entity.Article;
import com.yk.Motivation.domain.member.entity.Member;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.*;
import lombok.experimental.SuperBuilder;

import static lombok.AccessLevel.PROTECTED;

@Entity  // JPA Entity로 선언
@Setter  // Lombok: Setter 자동 생성
@Getter  // Lombok: Getter 자동 생성
@AllArgsConstructor(access = PROTECTED)  // 모든 필드 값을 인자로 받는 생성자 생성
@NoArgsConstructor(access = PROTECTED)
@SuperBuilder  // Lombok: Builder 패턴 구현
@ToString(callSuper = true)  // Lombok: toString 메서드 오버라이드
public class LikeA extends BaseEntity {
    @ManyToOne                      // JPA 어노테이션으로 Member 엔티티와 다대일 관계임을 나타냄.
    @JoinColumn(name = "member_id") // 연관 엔티티의 FK 컬럼 이름을 명시함.
    private Member member;          // Member 엔티티를 참조하는 필드

    @ManyToOne                      // JPA 어노테이션으로 Article 엔티티와 다대일 관계임을 나타냄.
    @JoinColumn(name = "article_id")// 연관 엔티티의 FK 컬럼 이름을 명시함.
    private Article article;        // Article 엔티티를 참조하는 필드

    // equals() 메서드를 오버라이드. member와 article을 기준으로 같은 객체인지 판별함.
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof LikeA)) return false;

        LikeA that = (LikeA) o;

        if (!member.equals(that.member)) return false;
        return article.equals(that.article);
    }

    // hashCode() 메서드를 오버라이드. member와 article을 기준으로 해시 코드를 생성함.
    @Override
    public int hashCode() {
        int result = member.hashCode();
        result = 31 * result + article.hashCode();
        return result;
    }
}

이 기능을 사용하지 않아서 인텔리제이에서 바로 코드를 삭제 후 다시 실행한 결과 에러가 났다.

	at com.yk.Motivation.domain.member.service.MemberService.setEmailVerified(MemberService.java:244) ~[classes/:na]

오류를 gpt에게 검색한 결과

해결 방안:

MemberService.java의 244번째 줄을 확인하여, member 객체가 왜 null인지 원인을 파악합니다.
해당 member 객체가 null이 되지 않도록 적절한 검사나 초기화를 수행합니다. 예를 들어, 메서드 내에서 member가 null인지를 체크하는 코드를 추가할 수 있습니다.

나는 멤버를 수정한 적이 1번도 없는데 이 부분에서 에러가 나오는 이유가 궁금했다.
때문에 gpt에게 몇가지 코드를 준 후 다시 물어본 결과

제공해주신 LikeA 엔터티를 삭제하면 오류가 발생한다고 하셨는데, 그 원인은 다양할 수 있습니다. 다음과 같은 가능한 원인 및 확인 사항들을 나열해 보겠습니다:

DB 스키마와의 불일치:

데이터베이스 스키마에는 LikeA 테이블이 존재하는데, 해당 엔터티를 삭제하면 JPA는 더 이상 해당 테이블과 매핑되는 엔터티를 찾을 수 없습니다. 이로 인해 오류가 발생할 수 있습니다.
해결책: 데이터베이스 스키마와 JPA 엔터티의 일치를 확인하세요. 필요하다면, LikeA 테이블도 삭제하거나 관련 설정을 조정하세요.

그랬다... DB에서 삭제하지 않고 코드를 바로 삭제하면 알아서 될 것이라 생각하면 안됐다...

매핑에 관하여 하나 더 알게됐다.

profile
g2jkj0274@gmail.com

0개의 댓글