31일차 - Spring강의(Entity 연관 관계)

2024. 8. 27. 21:22·Java & Spring/Spring

□ 1 대 1 관계(@OneToOne)

▷ 단방향 관계

  • 외래 키 주인 정하기 : 1대1 관계에서는 외래 키 주인을 직접 지정해야한다.
  • 외래 키의 주인만 외래 키를 등록, 수정, 삭제 할 수 있다.
  • 주인이 아닌 쪽은 읽기만 가능하다.

- 음식 Entity가 외래 키의 주인인 경우

- 음식 Entity 코드

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

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}

 

- 고객 Entity 코드

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

 

  • 주인 쪽에 @OneToOne 애노테이션과 @JoinColumn(name = "user_id"), 고객객체를 필드로 가진다.

▷ 양방향 관계

  • 양방향 관계에서 외래 키의 주인을 지정 할 때 mappedBy옵션을 사용(속성값은 외래 키의 주인인 상대 Entity 필드명을 의미)

- 음식 Entity 코드

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

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}

 

- 고객 Entity 코드

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToOne(mappedBy = "user")
    private Food food;
}

 

□ N 대 1 관계(@ManyToOne)

 

▷ 단방향 관계

- 음식 Entity 코드

@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 코드

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

 

▷ 양방향 관계

- 음식 Entity 코드

@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 코드

@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<>();
}

□ 1 대 N 관계

▷ 단방향 관계

- 음식 Entity 코드

package com.sparta.jpaadvance.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@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 코드

package com.sparta.jpaadvance.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

 

▷ 양방향 관계

- 고객 Entity 코드

package com.sparta.jpaadvance.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

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

 

□ N 대 M 관계

 

'Java & Spring > Spring' 카테고리의 다른 글

JWT 구현 및 사용  (0) 2024.09.09
37일차 - Spring강의(JPA Audting)  (0) 2024.09.04
29일차 - Spring강의(인증과 인가)  (0) 2024.08.23
28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)  (0) 2024.08.22
26일차 - Spring강의(Entity, 영속성 컨텍스트)  (0) 2024.08.20
'Java & Spring/Spring' 카테고리의 다른 글
  • JWT 구현 및 사용
  • 37일차 - Spring강의(JPA Audting)
  • 29일차 - Spring강의(인증과 인가)
  • 28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부 N
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출 N
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 제어자
    개발로드맵
    java enhance switch
    java 에라토스테네스의 체
    java super
    java기초
    프로그래머스 java 기초트레이닝
    Java this
    데이터 크기
    자료구조
    java 멤버
    java 유클리드 호제법
    프로그래머스 java 기초 트레이닝
    Java 생성자
    java 메서드
    java 세수의합
    데이터 타입
    java
    java arrays.copyofrnage()
    java two-pointer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
31일차 - Spring강의(Entity 연관 관계)
상단으로

티스토리툴바