JPA 연관관계 2

coldrice99·2024년 10월 20일
0

@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의 관계 설정을 통해 데이터베이스 테이블 간의 외래 키 관계를 자동으로 관리할 수 있다.

profile
서두르지 않으나 쉬지 않고

0개의 댓글