@Entity
가 붙은 클래스는 엔티티라고 하며 JPA가 관리한다.
JPA를 사용해서 테이블과 매핑할 클래스에는 해당 어노테이션을 꼭 붙여줘야 한다.
@Table
은 엔티티와 매핑할 테이블을 지정한다. 어노테이션을 따로 붙여주지 않으면 매핑한 엔티티 이름이 자동으로 테이블 이름이 된다.
✔️ DDL 생성 시에 유니크 제약 조건을 만든다.
JPA는 클래스의 매핑 정보와 데이터베이스 방언을 사용해 데이터베이스 스키마를 자동으로 생성한다.
<property name="hibernate.hbm2ddl.auto" value="create" />
persistence.xml에 위와 같은 속성을 추가하면 애플리케이션 실해 시점에 데이터베이서 테이블을 자동으로 생성한다.
👉 이 때 생성된 DDL은 개발장비에서만 사용해야 한다. 운영 서버에는 사용하면 안 된다. (운영 환경에서 사용할 만큼 완벽하지 않기 때문에 필요한 경우에는 적절히 다듬어 사용한다.)
hibernate.hbm2ddl.auto 속성
옵션 | 설명 |
---|---|
create | 기존 테이블을 삭제하고 다시 생성 (DROP + CREATE) |
create-drop | create와 같으나 종료시점에 테이블 DROP (DROP + CREATE + DROP) |
update | 변경분만 반영(운영DB에는 사용하면 안됨) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 사용하지 않음 |
❗운영 서버에서 create
, create-drop
, update
처럼 ddl을 수정하는 옵션은 절대 사용하면 안 된다. 이 옵션들은 운영 중인 db의 테이블이나 컬럼을 삭제할 수 있기 때문이다.
create
또는 update
update
또는 validate
validate
또는 none
JPA가 제공하는 필드와 컬럼 매핑용 어노테이션 - 필요할 떄 찾아보며 사용하면 된다.
어노테이션 | 설명 |
---|---|
@Column | 컬럼 매핑 |
@Temporal | 날짜 타입 매핑 |
@Enumerated | enum 타입 매핑 |
@Lob | BLOB, CLOB(대형데이터) 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) |
객체 필드를 테이블 컬럼에 매핑한다.
자바 enum타입을 매핑할 때 사용한다.
EnumTytpe.STRING
을 사용하는 것이 좋다. db에 문자로 저장되기 때문에 저장된 enum의 순서가 바뀌거나 enum이 추가되도 안전하다. (ORDINAL
은 이미 저장된 enum의 순서를 변경할 수 없다.)@Id @GeneratedValue(strategey = GeneratrionType.AUTO)
private Long id;
직접할당 : @Id
만 사용
자동 생성 (@GeneratedValue
)
<전략>
참고 )
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 김영한님 강의
자바 ORM 표준 JPA 프로그래밍 (김영한)
내배캠 수업 어떤가요? 만족하시나요?