리나 Dev토리

@ManyToOne 같은 연관관계 어노테이션 안쓰고 저장해도 되는지? 본문

SpringBoot 개인플젝(TodayMaker)

@ManyToOne 같은 연관관계 어노테이션 안쓰고 저장해도 되는지?

리나lina 2023. 4. 6. 18:11

할일 관리 프로젝트를 하면서

 

오늘 날짜할일 저장하는 중에

 

Todo : Day  관계가

  1 : N 경우도 있고

  N : 1 경우도 있고  =>  즉 N : N으로 만들어야 했다. 

 

그런데 김영한 쌤 강의에서 N:N는 가급적 하지 말라고 하셨다.

@ManyToMany 를 사용하지 말고

별도로 중간 테이블 역할의 엔티티를 추가하여   N:N  →  1:N, N:1 으로 풀어서 만들어야 한다.

 

그래서 혹시 @ManyToOne 같은 연관관계 어노테이션 안쓰고 저장해도 되는지 찾아보았다.

 

@ManyToOne과 같은 연관관계 어노테이션 없이도 저장할 수 있다.

그러나 이 경우에는 연관된 엔티티를 직접 참조해야 한다.

 

예를 들어, 다음과 같은 코드에서는 Team 엔티티와 Member 엔티티가 연관되어 있다

@Entity
public class Member {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToOne
    private Team team;
}

@Entity
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    private String name;
}


위 코드에서는 @ManyToOne 어노테이션을 사용하여 Member 엔티티와 Team 엔티티를 연관시켜주었다.

그러나 이를 어노테이션 없이 저장하려면 다음과 같이 코드를 작성할 수 있다:

@Entity
public class Member {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private Long teamId;
}

@Entity
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    private String name;
}


위 코드에서는 Member 엔티티에서 Team 엔티티를 직접 참조하는 대신에,

teamId 필드를 사용하여 연관된 엔티티의 ID를 저장한다.

이렇게 하면 연관된 엔티티를 직접 참조하지 않아도 되므로, 어노테이션 없이도 저장할 수 있다.

 

ERD에 그렸던 그대로

todoId 필드에 todo엔티티의 ID를 저장해주었다.

 

공부하며 작성한 글입니다.

잘못된게 있다면 댓글로 알려주세요:)

Comments