본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-12-23(40day)

by elicho91 2022. 12. 26.

JPA 연관관계


👉 연관관계

Aa 관계 코드 선언 Entity
다대일(N:1) @OneToMany Order(1) : Food(N) 배달 주문 1개에 음식 여러개 선택 가능
다대일(N:1) @ManyToOne Owner(N) : Restraunt(1) 음식점 주인 여러명이 하나의 음식점을 소유 가능
일대일(1:1) @OneToOne Order(1) : Coupon(1) 배달 주문 1개 주문 시, 쿠폰 1개만 할인 적용 가능
다대다(N:N) @ManyToMany User(N) : Restraunt(N) 고객은 음식점 여러개 찜 가능
음식점은 고객 여러명에서 찜 가능

 

 

# Member Entity

@Getter
@Entity
@NoArgsConstructor
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
		@Column(nullable = false)
    private String memberName;

    @OneToMany(mappedBy = "member", fetch = FetchType.EAGER)	// 연관관계 주인에 mappedBy 설정
    private List<Orders> orders = new ArrayList<>();	// 한명의 멤버는 여러개 음식의 주문을 할 수 있다.

    public Member(String memberName) {	// 생성자 추가
        this.memberName = memberName;
    }
}

 

# Food Entity

@Getter
@Entity
@NoArgsConstructor
public class Food {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(nullable = false)
    private String foodName;
    @Column(nullable = false)
    private int price;

    @OneToMany(mappedBy = "food",fetch = FetchType.EAGER)	// 연관관계 주인에 mappedBy 설정
    private List<Orders> orders = new ArrayList<>();	// 한개의 음식은 여러개의 주문에 포함 될 수 있다.

    public Food(String foodName, int price) {	// 생성자 추가
        this.foodName = foodName;
        this.price = price;
    }
}

 

# Orders Entity

@Getter
@Entity
@NoArgsConstructor
public class Orders {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "food_id")	// Food id를 멤버로 추가
    private Food food;

    @ManyToOne
    @JoinColumn(name = "member_id")	// Member의 id를 멤버로 추가
    private Member member;

    public Orders(Food food, Member member) {	// 생성자 추가
        this.food = food;
        this.member = member;
    }
}

 

 

 

# Spring Data JPA 추가기능 구현방법
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

 

Spring Data JPA - Reference Documentation

Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

 


🙋‍♂️ 소감 : 

연관관계가 너무 헤깔려서 이전 강의를 다시 보고 정리를 하였다.

다대일 단방향으로 만들려면 데이터베이스는 무조건 다(N)쪽이 외래 키를 갖고, 

다대일 양방향으로 만들려면 일(1)쪽에 @OneToMany를 추가하고 mappedBy로 연관 관계의 주인을 지정해줘야한다.

무에서는 일대다(1:N) 단방향은 거의 쓰지않는다.

😈 아는 내용이라고 그냥 넘어가지 않기! 😈

 

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-12-27(42day)  (0) 2022.12.28
[TIL] 2022-12-26(41day)  (0) 2022.12.27
[TIL] 2022-12-22(39day)  (0) 2022.12.22
[TIL] 2022-12-21(38day)  (0) 2022.12.21
[TIL] 2022-12-20(37day)  (0) 2022.12.20

댓글