기본편(4) - 엔티티 매핑
객체와 테이블 매핑
@Entity
@Entity 가 붙은 클래스는 JPA가 관리하며, 엔티티라 부른다.
JPA를 사용하여 테이블과 매핑할 클래스는 필수이다.
* 주의사항 *
- 기본 생성자 필수
- final 클래스, enum, interface, inner 클래스 사용X
@Entity 속성 정리
-
name
JPA에서 사용할 엔티티 이름, 기본값은 클래스 이름을 그대로 사용한다. 기본값 사용 권장 -
@Table
엔티티와 매핑할 테이블 지정
- name
- catalog, schema, uniqueConstraints
데이터베이스 스키마 자동 생성
- 스키마란?
DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조
출처: https://jwprogramming.tistory.com/47 [개발자를 꿈꾸는 프로그래머]
- DDL: 테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어
스키마 자동 생성이란
DDL을 애플리케이션 실행시점에 자동으로 생성하는 것을 의미하며, 테이블 중심에서 객체 중심의 개발이 가능하다.
하지만 개발단계에서만 사용해야 한다.
• 개발 초기 단계는 create 또는 update
• 테스트 서버는 update 또는 validate
• 스테이징과 운영 서버는 validate 또는 none
DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
필드와 컬럼 매핑
- 컬럼( Column ) : table에서의 열, 즉 테이블의 구성 요소
매핑 어노테이션 정리
- @Column
name : 필드와 매핑할 테이블의 컬럼 이름
- default = 객체의 필드 이름
insertable, updatable : 등록 변경 가능 여부
- default = True
nullable(DDL) : null 값의 허용 여부
unique(DDL) : @Table의 uniqueConstraints와 같다.
columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다. 필드의 자바 타입과 방언 정보를 사용해야 함
ex) varchar(100) default ‘EMPTY'
length(DDL) : 문자 길이 제약조건, String 타입에만 사용한다. 255
precision, scale(DDL) : BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다).
precision은 소수점을 포함한 전체 자 릿수를, scale은 소수의 자릿수다. 아주 큰 수를 다룰 때 사용
precision=19,
scale=2
- @Temporal
날짜 타입 매핑시, 최신 하이버네이트는 생략 가능 - @Enumerated
자바 enum 타입을 매핑할 때 사용
-> EnumType.STRING: enum 이름을 데이터베이스에 저장
꼭 STRING 타입을 사용해야 함!! - @Lob( Large Object)
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑 - @Transient
데이터베이스에 저장,조회 하지 않음, 주로 메모리상에서만 값을 다루고싶을 때 사용한다.
기본 키 매핑
기본 키 매핑 어노테이션
- @Id
- @GeneratedValue
기본 키 매핑 방법
- 직접할당 : @Id 어노테이션만 사용
- 자동생성 ( @GeneratedValue )
• IDENTITY: 데이터베이스에 위임, MYSQL
- IDENTITY 전략은 em.persist() 시점에 INSERT SQL을 실행하고 DB에서 식별자를 조회한다. • SEQUENCE : 데이터베이스 시퀸스 오브젝트 사용 ( 순서대로 값을 부여해주는 데이터베이스 내 오브젝트 ) -> @SequenceGenerator
• TABLE : 키 생성용 테이블 사용@Entity @SequenceGenerator( name = “MEMBER_SEQ_GENERATOR", sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름 initialValue = 1, allocationSize = 1)
-> TableGenerator
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
• AUTO : 방언에 따라 자동 지정, 기본값
- AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음
권장하는 식별자 전략
-
기본 키 제약 조건: 변경 X, null X
-
권장 : Long형 + 대체키 + 키 생성 전략 사용
대체키 <-> 자연키( 예 :주민등록번호 )
Author And Source
이 문제에 관하여(기본편(4) - 엔티티 매핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bins1225/기본편4-엔티티-매핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)