Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 Spring Master 3강 Entity @ManyToOne 단방향, 양방향 정리 본문

Spring

스파르타 부트캠프 Spring Master 3강 Entity @ManyToOne 단방향, 양방향 정리

H.S-Backend 2024. 5. 28. 20:19

N대 1관계 = @ManyToOne

 

 

음식 Entity가 N의 관계로 외래키의 주인

@Table(name = "food")
public class Food {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
}
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

양방향 관계에서는

양방향 참조를 위해 고객 Entity에서 Java 컬렉션을 사용하여 

음식 Entity를 참조하였다.

@Table(name = "food")
public class Food {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
}
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToMany(mappedBy = "user")
    private List<Food> foodList = new ArrayList<>();

    public void addFoodList(Food food) {
        this.foodList.add(food);
        food.setUser(this); // 외래 키(연관 관계) 설정
    }
}

 

외래키의 주인은 Food(Many) 

mappedBy를 사용하여 양방향관계를 맺고

<Food>제네릭을 사용하여

foodList를 생성자로 선언하고

addFoodList의 input값을 food로 전달받아서

foodList에 add을 한다.

해서 똑같이

food.setUser 메서드를 사용하여 this=User 를 지칭함으로 

User클래스에서도 Food의 List를 출력할 수 있다.(양방향)

 

@ManyToOne

결국은 User가 한명인데 여러개의 Food를 주문했었다면

해당 User Id를 조회하면 

주문했던 FoodList가 나오게하는것

으로 이해하면 쉽다.

 

반응형