Spring 26. N:1

김창민·2024년 8월 20일

BE

목록 보기
47/50

@ManyToOne 어노테이션은 N:1 관계를 맺어준다.

단방향

@OneToOne을 @ManyToOne로 수정하면 1:1 관계와 동일한 형태로 사용한다.


양방향

@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;
}
@Entity
@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); // 외래 키(연관 관계) 설정
    }
}

외래 키의 주인 Entity는 사실상 1:1과 동일하지만, 비주인 Entity는 private Food food;던 형태에서
private List foodList = new ArrayList<>();로 리스트 형태로 변했다.

이게 바로 N:1 관계이기 때문인데, 외래 키의 주인을 여러번 참조하기 때문에 리스트 형태로 받는것이다.
이후 이 List는 자바 내에서 사용되기 때문에 메소드로 기능을 구현해서 사용한다.

User user = new User();
user.setName("Robbie");
user.addFoodList(food);
user.addFoodList(food2);

이 코드를 통해 List에 저장하고, 추후 get메소드를 통해 해당 리스트를 받고 for문으로 출력을 진행하면 된다.

profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글