랄라
JPA Entity 본문
@ManyToMany(mappedBy = "userList")
private List<Food> foodList = new ArrayList<>();
JAVA 코드로 데이터베이스 구조를 작성하였으며, 자동으로 데이터베이스를 생성해주는 클래스
ORM(객체-관계 매핑)을 통해서 데이터베이스와 상호작용이 가능하다.
@Entity를 클래스 상단에 작성하여 엔티티클래스를 표시한다.
@Table의(name="테이블이름") 속성을 사용하면 테이블 이름을 사용자가 설정할 수 있다.
*application.properties나 application.yml 에 데이터베이스 연결정보를 작성해야 연동완료!
@Id
테이블에서 기본 키(primary key)를 정의.
숫자로 이루어져있으며, 보통 자동증가 속성을 추가하기위해
@GeneratedValue(strategy = GenerationType.IDENTITY)를 같이 작성한다.
Foreign Key 설정방법
외래키의 소유자 쪽에서 @JoinColumn 어노테이션을 작성하여 외래키를 설정.
소유자만이 왜래키를 등록, 수정, 삭제 할 수 있다.
*단방향
일방적인 참조의 관계(반대쪽에서는 참조가 불가능).
참조하는 방향에서만 상대방의 정보를 알고있음.
*양방향
서로 참조하는관계, 상대방의 정보를 양쪽에서 알고있음.
mappedBy 속성을 사용하여 외래키가 어디에 저장되었는지 확인.
@OneToOne(1:1관계)
Entity와 Entity가 1대1관계를 가짐.
보통 외래키는 N 쪽에서[외래키 소유자] 등록하지만 1:1 관계에서는 직접지정이 필요하다.
@OneToOne
@JoinColumn(name="왜래키 컬럼명")
private 상대엔티티클래스 이름; //ex) private User user;
단방향인 경우 참조하는 쪽[소유자]의 엔티티에만 @JoinColumn을 추가로 작성.
양방향인경우 외래키 소유자가 아닌 엔티티는 @OneToOne() 내부의 mappedBy 속성을 작성한다.
@OneToOne(mappedBy = "상대컬럼명") //@JoinCoulmn에 작성된 컬럼명
private 상대엔티티클래스 이름;
*mappedBy 옵션 생략할경우 중간테이블이 의도치않게 생성될 수 있음. 주의!
@Many To One (N:1 관계)
상단의 어노테이션만 변경된다. 단방향 양방향 작성방법 동일.
@ManyToOne //N인 쪽이 외래키 소유자
@JoinColumn(name = "컬럼명")
private B b;
양방향인경우 추가
@OneToMany(mappedBy= "b") //소유자가 아니기때문에 mappedBy 작성
private List<A> alists = new ArrayList<>();
//작성시 본인to상대 라고 생각하면됨!
@One To Many (1:N 관계)
*One 쪽이 외래키를 가지고있는경우
실제 키가 One 에 존재하는경우에도, Many 쪽에서 외래키를 동일하게 관리
@OneToMany
@JoinColumn(name = "컬럼명")
private List<A> alists = new ArrayList<>();
//상대값이 Many이기때문에 값을 여러개의 값을 받기위해 ArrayList로 구현
@Many to Many(N:M 관계)
다대다 관계는 중간테이블을 생성하여 사용한다.
*중간테이블이 없을경우 무한 루프 또는 데이터 정합성 문제가발생할 수 있다.
외래키 소유자 엔티티인경우
@ManyToMany
@JoinTable(name = "컬럼이름", // 중간 테이블 생성
joinColumns = @JoinColumn(name = "중간테이블 컬럼이름"), // 현재 위치 엔티티 에서 중간 테이블로 조인할 컬럼 설정
inverseJoinColumns = @JoinColumn(name = "반대 테이블 컬럼이름")) // 반대 위치 엔티티 에서 중간 테이블로 조인할 컬럼 설정
private List<B> bList = new ArrayList<>();
반대쪽에 존재하는 엔티티의경우
@ManyToMany(mappedBy = "bList")
private List<A> aList = new ArrayList<>();
자동적으로 생성하는경우 변경발생시 관리하기가 어려움 => 직접생성하는것이 좋다.
중간테이블을 생성하여 설정하는경우 중간테이블이 외래키 소유자가된다.
*양쪽의 외래키 컬럼정보를 하나의 중간테이블에 작성 / 나머지 엔티티들은 @OneToMany가 된다
@ManyToOne
@JoinColumn(name = "a_id")
private A a;
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
'내일배움캠프 > 공부정리' 카테고리의 다른 글
| 대규모 시스템 중요 개념 정리(1) (0) | 2025.03.10 |
|---|---|
| Docker 란? (0) | 2025.03.04 |
| RestTemplate (0) | 2025.02.11 |
| Spring Cloud (1) | 2025.02.07 |
| MSA와 MA의 정의 (0) | 2025.02.07 |