@ManyToOne
관계에서 객체를 주입하여 데이터베이스에서 매핑되는 부분을 설명해보겠다. 이는 지난 TIL에서 다뤘던 개념을 보충 설명하는 내용이다.
@ManyToOne
의 동작 원리@ManyToOne
은 데이터베이스에서 다대일 관계를 표현하는 데 사용된다. 예를 들어 여러 개의 Food
객체가 하나의 User
객체와 연결될 때 @ManyToOne
관계를 설정할 수 있다. 이때 데이터베이스에서는 Food
테이블의 user_id
라는 외래 키 컬럼을 통해 User
테이블의 id
와 관계를 맺는다.
자바 객체에서 @ManyToOne
애노테이션을 사용하면, JPA는 객체 간의 관계를 데이터베이스에 자동으로 매핑해 준다. 아래는 Food
엔티티의 예시이다:
@Entity
@Getter
@Setter
@Table(name = "foods")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "user_id") // 외래 키 컬럼명 지정
private User user; // User 객체와 연결
}
위 코드를 통해:
@ManyToOne
애노테이션이 Food
객체와 User
객체가 연결된다는 것을 나타낸다.@JoinColumn(name = "user_id")
는 foods
테이블에 user_id
라는 외래 키 컬럼을 생성하며, 이 컬럼은 users
테이블의 id
를 참조한다.User user = new User();
user.setName("John");
Food food = new Food();
food.setName("Pizza");
food.setUser(user); // 객체 주입을 통해 관계 설정
// 저장
entityManager.persist(user);
entityManager.persist(food);
food.setUser(user);
는 Food
객체에 User
객체를 주입하여 객체 간의 관계를 설정하는 역할을 한다. 이때 Food
객체를 저장하면 foods
테이블의 user_id
컬럼에 user
객체의 id
값이 자동으로 매핑되어 저장된다. JPA는 이러한 설정을 통해 데이터베이스에서의 외래 키 관계를 자동으로 관리해 준다.
users 테이블:
| id | name |
|-----|-------|
| 1 | John |
foods 테이블:
| id | name | user_id |
|-----|--------|---------|
| 1 | Pizza | 1 |
foods
테이블의 user_id
컬럼이 users
테이블의 id
와 연결되어 Food
객체와 User
객체 간의 관계를 매핑해 주는 것이다.
객체 주입을 통한 매핑은 JPA가 자바 객체 간의 관계를 데이터베이스의 외래 키 관계로 자동 변환해 주는 방식이다. @ManyToOne
애노테이션과 @JoinColumn
을 사용하고 해당 필드에 객체를 설정하면, 개발자가 직접 외래 키를 관리할 필요 없이 JPA가 데이터베이스에 저장할 때 자동으로 매핑해 준다.
이와 같이 JPA의 관계 설정을 통해 데이터베이스 테이블 간의 외래 키 관계를 자동으로 관리할 수 있다.