@OneToMany어노테이션은 1:N 관계를 맺어준다.
1:N 관계에선 N 입장의 Entity가 외래 키의 주인이 된다고 했었다.
실제로 N:1 관계에선 그렇게 진행했다.
하지만 다음 경우는 1의 Entity가 외래 키의 주인이 되는 상황이다.
이 상황에선 N의 Entity가 외래 키 컬럼을 만들어 추가하고 관리는 1의 Entity가 한다.
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToMany
@JoinColumn(name = "food_id") // users 테이블에 food_id 컬럼
private List<User> userList = new ArrayList<>();
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
위와 같은 1:N 관계에선 양방향 관계가 존재하지 않는다.
억지로 한다면
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "food_id", insertable = false, updatable = false)
private Food food;
}
를 통해 join으로 흉내는 가능하다.