객체와 테이블 매핑
@Entity, @Table
@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
기본 생성자가 필수이다.
@Entity 속성: name
JPA에서 사용할 엔티티 이름을 지정한다.
(지정하지 않으면 기본값으로 클래스 이름을 그대로 사용한다)
@Table은 엔티티와 매핑할 데이터베이스 테이블을 지정한다.
@Table(name=테이블명)으로 사용한다.
데이터베이스 스키마 자동 생성
JPA에서는 애플리케이션 로딩시점에 DB테이블을 생성하는 기능을 지원한다.
hibernate.hbm2ddl.auto
속성: create,create-drop,update,validate,none
데이터베이스에 맞는 적절한 DDL을 생성한다.
이렇게 생성된 DDL는 개발에서만 사용(운영서버에서는 사용하지 않거나 적절히 다듬어 사용하는것을 권장한다.
운영 장비에는 절대 create, create-drop, update 사용하면 안된다.
개발 초기 단계에는 create 또는 update를,
테스트 서버는 update 또는 validate
스테이징과 운영 서버는 validate 또는 none...가급적 쓰지말도록 한다.
가급적 스크립트를 직접 작성해서 적용하는것이..안전하다. 로컬PC에서나 사용하자.
필드와 컬럼 매핑
매핑 어노테이션들(@Column, @Enumerated, @Temporal, @Lob, @Transient)
@Column
name: 필드와 매핑할 테이블의 컬럼 이름
insertable, updatable, nullable, length등의 속성 ...
@Enumerated(EnumType.STRING) -> enum타입 매핑
속성은 EnumType.ORDINAL, EnumType.STRING 두 가지가 있다.
ORDINAL: enum순서를 DB에 저장
STRING: enum이름을 DB에 저장
여기서, ORDINAL이 기본설정이지만 이 설정을 쓰면 위험하다. enum이 수정되어 순서가 바뀌게되면 잘못된 값이 저장되기 때문. 따라서 STRING을 쓰자.
@Temporal -> 날짜타입 매핑
(LocalDate, LocalDateTime을 사용할 때는 생략 가능하다)
@Lob -> 큰 데이터를 저장할 때
이미지, 비디오
데이터베이스 BLOB,CLOB으로 매핑.
@Transient
필드를 매핑하지 않도록 함
기본 키 매핑
직접할당: @Id, 자동생성: @GeneratedValue
@GeneratedValue(strategy=전략)
전략들
IDENTITY: 기본 키 생성을 데이터베이스에 위임.
SEQUENCE:
연관관계 매핑
@ManyToOne, @JoinColumn
댓글