🌼엔티티 - 테이블 간 매핑
@Entity / @Id와 꼭 함께 필수로 사용
에트리뷰트 name사용 가능 - 엔티티의 이름설정 (설정 안하면 클래스명을 엔티티 이름으로 한다)
@Table
옵션 , 클래스레벨에 붙임
애트리뷰트 name 사용 가능 ( 데이터베이스의 테이블 이름 설정)
@Entity는 식별할 이름 설정
@Table은 데이터베이스에 생성될 Table의 이름 설정
@Table이 없고 @Entity만 존재하는 경우
@Entity의 name 속성에 의해 Entity와 Table이름이 모두 결정
@NoArgsConstructor
파라미터가 없는 기본 생성자 필수로 추가
🌼기본키 매핑
@Id
@GeneratedValue(strategy = GenerationType.생성방법)
기본키 생성방법 정하는 애너테이션
🍭기본키 생성전략
1. 기본키 직접할당
@Id
2. 기본키 자동생성
- IDENTITY
GeneratedValue(strategy = GenerationType.IDENTITY)
데이터베이스에서 기본키를 대신 생성해줌
ex) MySQL의 AUTO_INCREMENT 기능 : 기본키 숫자가 자동으로 +1
데이터베이스에 등록(persist())하는 순간 해당 엔터티가 영속상태가 되며,
트랜잭션이 commit되기전에 데이터베이스에 즉시 쿼리문이 실행되어 값을 생성하고 등록
- SEQUENCE
GeneratedValue(strategy = GenerationType.SEQUENCE)
엔티티가 영속성 컨텍스트에 저장되기 전에 데이터베이스가 시퀀스객체에서 기본키에 해당하는 값 제공
데이터를 영속화 하고 데이터베이스에 등록해도 시퀀스 값은 트랜잭션이 커밋되기 전까지 생성되지않는다
persist()를 호출하더라도 시퀀스를 생성하는 쿼리문은 트랜잭션이 커밋되는 시점에 실행된다.
- GeneratedValue(strategy = GenerationType.AUTO)
Dialect에 따라서 적절한 전략 자동선택
Dialect는 특정 데이터베이스에 특화된 고유한 기능
🌼필드(멤버변수)와 열 간의 매핑
@Column
필드와 컬럼을 매핑해준다
변수마다 적어줘야함
@Column 애너테이션이 없을경우
디폴트 값 nullable = true, updatable = true, unique = false
nullable = true 일때 int,long 같은 Java의 원시타입은 null값 입력 불가 (객체타입일 경우에만 적용)
nullable = false를 설정해주어야한다
@Column의 애트리뷰트
-nullable
-updatable
-unique
-length
-name
@Transient
테이블 컬럼과 매핑하지 않는다
데이터 베이스에 저장하지 않고 조회할때 매핑 x
임시데이터를 메모리에서 사용하기위한 용도
@Enumerated(EnumType.타입)
EnumType.ORDINAL
enum의 순서를 나타내는 숫자를 테이블에 저장
중간에 추가하게 되면 순서,번호가 이상해져서 잘 사용하지 않음
EnumType.STRING 사용권장
enum의 이름을 테이블에 저장
🌼엔티티 - 엔티티의 연관관계 매핑
다(N)에 해당하는 클래스에서 일(1)에 해당하는 객체를 외래키로 가진다
기본적으로 단방향 매핑을 하고 필요성이 생길때 양방향 매핑을 추가한다
단방향 연관관계
한쪽 클래스만 다른 쪽 클래스의 참조정보를 가지고 있는 관계
양방향 연관관계
양쪽 클래스가 서로의 참조정보를 가지고 있는 관계
🍭일대다 단방향 연관관계(One TO Many)
일(1)에 해당하는 클래스가 다(N)에 해당하는 객체를 참조할 수 있는 관계
ex) 한명의 회원이 여러번의 주문 (Member클래스에 Orders를 List로 가져와서 참조)
잘 사용하지 않는다
🍭다대일 연관관계(Many To One)
다(N)에 해당하는 클래스가 일(1)에 해당하는 객체를 참조할 수 있는 관계
가장 기본으로 사용되는 매핑방식
ex)한명의 회원이 여러번의 주문
(Order클래스에 memberId를 외래키로 참조, Member클래스에 Order객체를 List로 참조)
@JoinColumn(name = "외래키명") 애너테이션으로 외래키 이름 설정
@OneToMany(mappedBy = "외래키 역할하는 필드")로 외래키의 역할을 알림
@ManyToOne
@JoinColumn(name = "외래키에 해당하는 열 이름")
다대일 매핑에 일대다 매핑 추가해서 양방향 관계로 만들어 주기
@OneToMany(mappedBy= "외래키 역할하는 필드")
mappedBy
1.두 객체들 간에 외래키의 역할을 하는 필드는 무엇인가?
2.외래키의 역할을 하는 필드는 다(N)에 해당하는 클래스 안에 있음
관계의 중심을 외래키에서부터 시작하기
🍭다대다 연관관계(Many To Many)
@ManyToMany
ex) 주문과 커피의 관계 = 다대다 관계
한 커피를 여러명이 주문 가능 / 한명이 여러 커피 주문 가능
Coffee(1) - OrderCoffee(N) / OrderCoffee(N) - Order(1)
조인테이블과 같은 클래스를 하나 더 만들어 주기
1 - N - 1 관계로 다대일 관계를 두번 설정
🍭일대일 연관관계(OneToOne)
@OneToOne
외래키가 있는 곳이 연관관계의 주인
일대일 단방향매핑에 양방향 매핑 추가도 다대일에 일대다 매핑 추가하는 방식과 동일
'개발공부🌷 > Spring MVC' 카테고리의 다른 글
Spring MVC 테스팅(Testing) (0) | 2023.12.06 |
---|---|
Spring MVC 트랜잭션(Transaction) (0) | 2023.12.05 |
Spring MVC JPA (0) | 2023.11.28 |
Spring MVC Data JPA (0) | 2023.11.27 |
Spring MVC 예외처리 (0) | 2023.11.23 |