My Melody Is Cute Spring MVC JPA 2
본문 바로가기

개발공부🌷/Spring MVC

Spring MVC JPA 2

🌼엔티티 - 테이블 간 매핑

 

@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