-
'mappedBy' another entity and may not specify the '@JoinColumn'JPA 2023. 5. 15. 17:16
프로젝트 진행중 다음과 같은 오류를 만나버렸다...
이를 해결해 보도록 하자.
1. @JoinColumn
@JoinColumn은 DB 관점으로 보았을 때, 본인이 외래 키를 관리하며 상대 Table의 PK(Join할 때 사용)를 명시해주는 역할을 한다.
Member.java
@Entity class Member { @Id @GeneratedValue private Long member_id; @ManyToOne @JoinColumn(name="team_id") private Team team; ... }
Team.java@Entity class Team { @Id @GeneratedValue private Long team_id; ... }
이렇게 두면 Member Table의 FK 속성으로 team_id가 생성될 것이다.
연관관계의 주인은 FK를 관리하는 쪽이다. 즉, @JoinColumn을 쓰는 쪽의 Class가 연관관계의 주인이 된다.2. mappedBy
mappedBy 또한 특정 관계와의 연관관계를 나타낼 때 사용하는데, @ManyToOne과는 달리 연관관계의 주인이 아닌 쪽의 Class 내에서 사용한다.
보통 양방향 연관관계에서 사용한다.저는 상대 클래스와 연관된 클래스입니다. 관련은 있는데 저에 대한 외래키는 쟤가 갖고있어요. 그러므로 저는 연관관계의 주인이 아니랍니다. mappedBy 붙은 쟤가 연관관계 주인이에요.
Member.java
@Entity class Member { @Id @GeneratedValue private Long member_id; @ManyToOne @JoinColumn(name="team_id") private Team team; ... }
Team.java@Entity class Team { @Id @GeneratedValue private Long team_id; @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); ... }
오류발생의이유
@JoinColumn과 mappedBy를 동시에 사용하였고 이는 본인이 연관관계의 주인이자 연관관계의 주인이 아니라는 것을 의미하게 된다. 이러한 모순으로 인해 에러가 발생했던 것이다.
728x90'JPA' 카테고리의 다른 글
영속성 컨텍스트 이점을 아라보자 (0) 2024.02.03 @JoinColumn을 아라보자 (0) 2023.05.17 Table생성이 안되는 에러 (0) 2023.04.03 Unable to create a Configuration, because no Jakarta Bean Validation provider could be found (0) 2023.03.31 createdAt의 저장(Auditing) (0) 2023.03.30