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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바