Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 스토리지 #objects storage #events #upload #알림
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 #스토리지 #isci #이미지 #업로드
- aws #아키텍트 #과정 #vpc #인프라 구축 #auto scailling #lauch template #ec2 instace #private #subnet
- aws #아키텍트 #과정 #vpc #인프라 구축 #aurora #database #rds #rdbs #load #balancer #web #page #haproxy
- aws #아키텍트 #과정 #vpc #인프라 구축 #amazon sns #server #less #architecture
- 썸네일 #이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #replica #복제본 #aurora #database #고가용성
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #trigger #python3.9 #패키지 #
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #alb #application #load #balancer #security #group #igw #ec2 #vpc #virtual #private #cloud
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #message #queue #sns구독
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #second nat #gateway #routing table #route53 #고가용성 #private subnet #
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #고가용성 #테스트 #alb #application #load balancer #application
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 비트 #바이트 #이진수
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- aws #아키텍트 #과정 #vpc #인프라 구축
- aws #아키텍트 #과정 #vpc #인프라 구축 #ec2 #instance #launch #template #생성 #ami #amazone #machine #image
- 쓰레드 #쓰레드풀 #프로세스
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #endpoint #cloudwatch #monitoring
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #round robin #process #high ability #auto scailling #app server #launch template
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축 #alb #load balancer #t.g #target #group #haproxy #high ability #db #replica #region
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #t.g #target group #alb #application #load #balancer #web #server
- 업로드 #lambda #함수 #모바일 이미지 #썸네일 이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #db #장애조치 #reand only #replica #events
Archives
- Today
- Total
요리사에서 IT개발자로
스파르타 부트캠프 Spring Master 3강 Entity @OneToOne 단방향, 양방향 정리 본문
1대 1관계
@OneToOne (1대 1 관계를 맺어주는 역할)
Entity에서 외래키의 주인은
일반적으로 N(다수)의 관계 Entity이지만
1대1관계 에서는 외래키의 주인을 직접 지정해야한다.
외래키를 가지고있는 클래스만이
외래키를 등록, 수정, 삭제할 수 있고
아닌쪽은 읽는 것만 가능하다.
@JoinColumn() 은
외래 키의 주인이 활용하는 에너테이션이다.
컬럼명, Null여부, Unique여부 등 지정할 수 있다.
@OneToOne
@JoinColumn(name = "user_id")
private User user;
Food Entity가 외래키의 주인인 경우
@Entity
@Getter
@Setter
@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
@Getter
@Setter
@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;
}
import jakarta.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "food_id")
private Food food;
}
@OneToOne 에너테이션 밑에
@JoinColumn을 가지고 외래키의 주인이 활용하는 에너테이션
양방향 관계
외래키 지정시 mappedBy 옵션을 사용한다.
외래키의 주인인 상대 Entity필드명을 의미한다
관계 설정 방법
단방향은
외래 키의 주인만
상대 Entity 타입의 필드를 가지며
JoinColumn()을 활용하여 외래키 속성을 설정해준다.
@OneToOne
@JoinColumn(name = "user_id")
private User user;
양방향은
외래키의 주인은
상대 Entity 타입의 필드를 가지면서
JoinColumn()을 활용하여 외래 키의 속성을 설정해준다.
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 타입의 필드를 가지면서
mappedBy 옵션을 사용하여 속성 값으로
외래 키의 주인 Entity에 선언된
JoinColumn()으로 설정되고 있는 필드명을 넣어주면된다.
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
외래키의 주인 Entity에서 @JoinColumn()은 default옵션으로 생략이 가능하다
하지만 1대 N 관계에서는 JoinColumn을 생략하면
중간테이블이 생성된다.
똑같이 양방향 관계에서 mappedBy옵션을 생략하면
중간테이블이 설정된다.
Jpa가 외래키를 찾을 수 없기에 기본으로 생성해두자
음식 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
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
}
@OneToOne 양방향
@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;
}
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
public void addFood(Food food) {
this.food = food;
food.setUser(this);
}
양방향에서
Food테이블이 외래키를 기본적으로 갖고 있으며
maapedBy를 사용하여 user필드를 가져와서 양방향이 되고
User 클래스에서
addFood 클래스를 생성하여
food.setUser를 사용하여 (this = User를 지칭)
함으로
User에서도 Food를 가져올 수 있게 할 수 있다.
반응형
'Spring' 카테고리의 다른 글
스파르타 부트캠프 Spring Master 3강 Entity @OneToMany 단방향, 양방향 정리 (0) | 2024.05.28 |
---|---|
스파르타 부트캠프 Spring Master 3강 Entity @ManyToOne 단방향, 양방향 정리 (0) | 2024.05.28 |
스파르타 부트캠프 Spring Master 3강 Spring Security 로그인 (0) | 2024.05.27 |
스파르타 부트캠프 Spring Master 3강 Spring Security 프레임워크란 (0) | 2024.05.26 |
스파르타 부트캠프 Spring Master 3강 필터(Filter) (0) | 2024.05.26 |