@Entity
- @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
주의
- 기본 생성자 필수
- final 클래스, enum, interface, inner 클래스 사용 x
- 저장할 필드에 final 사용 x
데이터베이스 스키마 자동 생성
개발단계에서 Application 로딩 시점에 테이블 생성 기능이 있음
- DDL(Data Definition Language)을 어플리케이션 실행 시점에 자동 생성
- 테이블 중심 -> 객체중심
- 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
- 이렇게 생성된 DDL은 개발 장비에서만 사용
- 생성된 DDL은 웅영서버에서는 사용하지 않거나, 적절히 다담은 후에 사용
"DDL"은 데이터베이스에서 데이터 정의 언어(Data Definition Language)의 약어입니다. 데이터 정의 언어는 데이터베이스에서 테이블, 인덱스, 뷰 등을 생성, 변경, 삭제하는 등의 작업에 사용되는 언어입니다. 일반적으로 SQL(Structured Query Language)을 사용하여 구현됩니다. 즉, DDL은 데이터베이스 구조를 정의하고 조작하기 위해 사용하는 언어라고 간단히 말할 수 있습니다.
데이터베이스 스키마 자동생성 - 속성
hibernate.hbm2ddl.auto
옵션 | 설명 |
create | 기존 테이블 삭제 후 다시 생성(DROP + CREATE) |
create-drop | create 와 같으나 종료시점에 테이블 DROP |
update | 변경분만 반영(운영 DB에는 사용하면 안됨) |
validate | 엔티티와 테이블이 정상 매핑 되었는지만 확인 |
none | 사용하지 않음 |
- 스키마 자동 생성하기 설정
- 스키마 자동생성하기 실행, 옵션별 확인
- 데이터베이스 방언 별로 달라지는 것 확인(varchar)
스키마(Schema)란 데이터베이스에서 데이터 구조, 제약 조건, 보안 규칙 등의 데이터베이스에 대한 전반적인 정의를 담고 있는 골격 구조를 의미합니다. 즉, 데이터베이스의 논리적인 구조를 설명하는 청사진(Blueprint)이라고 할 수 있습니다. 스키마는 데이터베이스에서 사용하는 테이블, 필드, 뷰 등의 객체들과 그들 간의 관계, 권한 등을 정의하며, 데이터베이스 관리자(DBA)나 데이터베이스 사용자들이 데이터베이스를 보다 효율적으로 관리하고 활용할 수 있도록 합니다. 스키마는 데이터베이스에서 중요한 개념 중 하나이며, 데이터베이스 설계와 구현에서 매우 중요한 역할을 합니다.
데이터베이스 스키마 자동 생성 - 주의
- 운영 장비에서는 절대 create, create-drop, update 사용하면 안된다.
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영 서버는 validate 또는 none
DDL 생성 기능
- 제약조건 추가 : 회원 이름은 필수, 10자 초과X
- @Column(nullable= false, length= 10)
- 유니크 제약조건 추가
- @Table(uniqueConstraints={@UniqueConstraint(name = "NAME_AGE_UNIQUE", columnNames={"NAME", "AGE"})})
- DDL 생성 기능은 DDL 을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
매핑 어노테이션 정리
hibernate.hbm2ddl.auto
어노테이션 | 설명 |
@Column | 컬럼 매핑 |
@Tempral | 날짜 타입 매핑 |
@Enumerated | enum 타입 매핑 |
@Lob | BLOB, CLOB 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) |
@Column
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체의 필드 이름 |
insertable, updatable |
등록, 변경 가능 여부 | true |
nullable(DDL) | null 값의 허용 여부를 설정한다, false로 설정 하면 DDL 생성 시에 not null 제약 조건이 붙는다. | |
unique(DDL) | @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. | |
columnDefinition (DDL)
|
데이터베이스 컬럼 정보를 직접 줄 수 있다.
ex) varchar(100) default ‘EMPTY'
|
필드의 자바 타입과 방언 정보를 사용해
|
length(DDL)
|
문자 길이 제약조건, String 타입에만 사용한다.
|
255
|
precision, scale(DDL)
|
BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다). precision은 소수점을 포함한 전체 자 릿수를, scale은 소수의 자릿수 다. 참고로 double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정 밀한 소수를 다루어야 할 때만 사용한다.
|
precision=19, scale=2
|
@Enumerated
- 자바 enum 타입을 매핑할 때 사용 주의! ORDINAL 사용X
김영한 선생님 강의 복습 용도 메모
'공부방 > JPA' 카테고리의 다른 글
고급 매핑 (0) | 2023.03.04 |
---|---|
다양한 연관관계 매핑 (0) | 2023.02.22 |
연관관계 매핑 기초 (0) | 2023.02.19 |
준영속 상태 (0) | 2023.02.13 |
영속성 컨텍스트 (0) | 2023.02.12 |
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!