일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- WeNews
- 테스트
- 네이티브쿼리
- 서브쿼리
- 검색
- 외부키
- 커밋메세지수정
- 포트
- 메세지수정
- ㅔㄴ션
- 메소드명
- application.yml
- Query
- MySQL
- 적용우선순위
- appspec
- 컨테이너실행
- docker명령어
- 참조키
- subquery
- 추후정리
- ubuntu
- querydsl
- 테스트메소드
- foreignkey
- 2 > /dev/null
- appspec.yml
- EC2
- 예약
- AuthenticationEntryPoint
- Today
- Total
제뉴어리의 모든것
Spring Data JPA 기본키 매핑 방법 본문
오늘은 Spring Data JPA 기본키 매핑하는 방법에 대해서 알아보겠습니다.
Spring Data JPA 에서는 엔티티의 기본키를 @Id 어노테이션을 사용하여 설정합니다.
@Entity
public class Team
{
@Id
@Column(name = "team_id")
private Long id;
(이하 생략)
}
이때, 기본키를 할당하는 방법으로는 두가지가 있습니다.
- 직접할당 : 기본 키를 어플리케이션에서 직접 할당 해주는 방법
- 자동생성 : 데이터베이스가 자동으로 할당해주는 방법 (예를들어, 오라클은 sequence, MySQL의 auto_increment)
데이터베이스 벤더마다 sequence, auto_increment 등 기본키를 자동생성하는 지원하는 방법이 다릅니다.
Spring Data JPA는 이를 해결하기위해, 4가지 자동생성 방법을 제공합니다.
기본키 자동생성 방법
- IDENTITY : 기본 키 생성을 데이터베이스에 위임하는 방법 (데이터베이스에 의존적)
- 주로 MySQL, PostgresSQL, SQL Server, DB2에서 사용합니다. - SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당하는 방법 (데이터베이스에 의존적)
- 주로 시퀀스를 지원하는 Oracle, PostgresSQL, DB2, H2에서 사용합니다.
- @SequenceGenerator를 사용하여 시퀀스 생성기를 등록하고, 실제 데이터베이스의 생성될 시퀀스이름을 지정해줘야 합니다. - TABLE : 키 생성 테이블을 사용하는 방법
- 키 생성 전용 테이블을 하나 만들고 여기에 이름과 값으로 사용할 컬럼을 만드는 방법입니다.
- 테이블을 사용하므로, 데이터베이스 벤더에 상관없이 모든 데이터베이스에 적용이 가능합니다. - AUTO : 데이터베이스 벤더에 의존하지 않고, 데이터베이스는 기본키를 할당하는 벙법
- 데이터베이스에 따라서 IDENTITY, SEQUENCE, TABLE 방법 중 하나를 자동으로 선택해주는 방법입니다.
- 예를들어, Oracle일 경우 SEQUENCE를 자동으로 선택해서 사용합니다. 따라서, 데이터베이스를 변경해도 코드를 수정할 필요가 없습니다.
기본 키를 직접 할당하기 위해서는 @Id 어노테이션만 사용하면 되고, 자동 생성 전략을 사용하기 위해서는 @Id에 @GeneratedValue를
추가하고 원하는 키 생성 전략을 선택하면 된다.
기본키 자동생성 사용방법
- @Id 어노테이션을 사용한다.
- @GeneratedValue를 사용한다.
- @GeneratedValue에 원하는 키 생성 전략을 선택한다. (IDENTITY, SEQUENCE, TABLE, AUTO)
Sample code
@Entity
public class Team
{
@Id
@Column(name = "team_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
(이하 생략)
}
@Entity
@SequeceGenerator(name = "TEAM_SEQ_GENERATOR", sequenceName = "TEAM_SEQ", initialValue = 1, allocationSize = 1)
// name=식별자 생성기 이름, sequenceName=DB에 등록될 시퀀스이름, initialValue=최초시작하는 수, allocationSize=증가하는수)
public class Team
{
@Id
@Column(name = "team_id")
@GeneratedValue(strategy = GenerationType. SEQUENCE, generator = "TEAM_SEQ_GENERATOR")
private Long id;
(이하 생략)
}
@Entity
@TableGenerator(name="TEAM_SEQ_GENERATOR", table="TEAM_SEQUENCES", pkColumnValue="TEAM_SEQ", allocationSize=1)
// name=식별자 생성기 이름, table=키생성 테이블 이름, pkColumnValue=DB에 등록될 시퀀스이름)
public class Team
{
@Id
@Column(name = "team_id")
@GeneratedValue(strategy = GenerationType. TABLE, generator = "TEAM_SEQ_GENERATOR")
private Long id;
(이하 생략)
}
@Entity
public class Team
{
@Id
@Column(name = "team_id")
@GeneratedValue(strategy = GenerationType. AUTO)
private Long id;
(이하 생략)
}
출처 : Spring Data JPA 기본키 매핑하는 방법 - Fall in IT. (tistory.com)
'Spring Boot' 카테고리의 다른 글
[Spring] 자바빈이란 그리고 자바빈의 필요성 (0) | 2021.01.23 |
---|---|
[Spring] 스프링 빈(Bean)의 개념과 생성 원리 (0) | 2021.01.23 |
Controller에서 파라미터로 데이터 받는 상황 정리 (0) | 2021.01.19 |
스프링부트 프로젝트 런한 바이너리가 계속 돌아갈때 (0) | 2021.01.18 |
리다이렉트시 Model의 달라진점 (0) | 2021.01.18 |