본문 바로가기
I LEARNED/TIL

TIL_@Id & @GeneratedValue

by veganwithbacon 2022. 8. 11.
반응형

  @Id?

- 테이블의 PK(Primary Key)역할을 한다는 것을 나타낸다.

- 속성에 직접 @Id를 붙여주면 실행시점에 객체 필드를 통해 접근하게 하는 것이며,

-  getter를 이용하려면 getter에 @Id를 붙여준다.

-  속성에 부여하게되면 getter/setter 없이도 작업이 가능하다.

  그러나 setter에 @Id를 붙이면 예외가 발생한다

 

 

  @GeneratedValue

 : 주 키의 값을 위한 자동 생성 전략을 명시하는데 사용

   선택적 속성으로 generator와 strategy가 있다

 

  strategy

  :  persistance provider가 엔티티의 pk를 생성할 때 사용하며 디폴트값은 AUTO이다

 

  generator

   :  주로 SequenceGenerator나 TableGenerator 어노테이션에서 명시된 pk생성자를 재사용시 쓰인다

      디폴트 값은 공백문자("")이다

 

PK 생성 전략으로 JPA가 지원하는 것은 아래 4가지이다

1. AUTO : 특정 DB에 맞게 자동 선택(persistence provider가 지정)

2. IDENTITY : DB의 identity 컬럼을 이용

3. SEQUENCE : DB의 시퀀스 컬럼을 이용

4. TABLE : 유일성이 보장된 DB테이블을 이용

 

AUTO와 SEQUENCE는 실제 INSERT쿼리가 일어나기 전 다음 쿼리를 통해 주키를 가져온다

 

AUTO외에는 대상 DB에 대한 지식이 요구됨으로 아하! 정도로만 알고 넘어가자

위 네가지 생성전략의 내장 Generator 이름은 이렇다

1.native : AUTO

2.identity : IDENTITY

3.sequence : SEQUENCE

4.TABLE에 대응하는 내장 Generator는 없음

 

 

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long Id;

아마 대부분이 이러한 코드의  아래 부분 때문에 왔을 것이라고 본다.

@GeneratedValue(strategy=GenerationType.AUTO)

한줄 요약하자면 자동으로 증가시켜준다

DB에서 몇번째 값인지 기입하기 위해 대부분 위와 같은 코드를 Id에 입력한다

반응형

'I LEARNED > TIL' 카테고리의 다른 글

WIL_2 CORS  (0) 2022.08.15
TIL_연관관계 주인 정하기  (0) 2022.08.15
TIL_@Column #Spring  (0) 2022.08.07
TIL_@RequestMapping #Spring  (0) 2022.08.06
TIL_ 스프링 IOC 컨테이너 -빈 사용방법  (0) 2022.08.05

댓글