<aside> ❗
@Entity, @Table
@Column
@Id
@ManyToOne, @JoinColumn
Member ↔ Team
</aside><aside> ❗
@Entity
가 붙은 클래스는 JPA가 관리, 엔티티
라고 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
즉, JPA 엔티티의 이름 지정
** 주의 **
기본 생성자 필수
다양한 기술을 사용하기 위함[속성 : name]
JPA에서 사용할 엔티티 이름을 지정
( 내부적으로 엔티티를 식별하는 이름 )클래스 이름을 그대로 사용
<aside> ❗
엔티티와 매핑할 테이블을 지정
[속성 : name]
JPA 엔티티의 이름과 매핑해서 사용할 테이블 이름 지정
// 특정 컬럼의 값이 중복되지 않도록 보장하는 제약 조건
// 하나의 테이블 내에서 중복된 값을 허용하지 않음
// 동일한 테이블 내에서만 적용됨
@Table(uniqueConstraints = "email" )
</aside>
<aside> ❗
객체 매핑을 해두면 알아서 테이블을 만들어준다.
개발 장비에서만 사용
즉, 개발 및 테스트 환경에서만 사용
적절히 다듬은 후 사용
자동으로 DDL을 실행하면 위험할 수 있음
</aside><aside> ❗
// 기존 테이블 삭제 후, 다시 생성
<property name="hibernate.hbm2ddl.auto" value="create" />
// 변경분만 반영(운영 DB에서 사용하면 안 됨)
// 추가하는 것만 반영, 지우는 건 안 됨
<property name="hibernate.hbm2ddl.auto" value="update" />
// 엔티티와 테이블이 정상 매핑되었는지만 확인
<property name="hibernate.hbm2ddl.auto" value="validate" />
**** 주의 ****
운영 장비에는 절대 create, create-drop, update 사용하면 안 된다.
즉, 직접 스크립트 작성해보고 직접 적용해보는 것이 좋다.
웹 어플리케이션 계정은 ALTER, DROP을 못하도록 계정을 분리하는게 맞다.
</aside><aside> ❗
JPA는 DDL 생성해주는 것만 도와준다. 실행 자체에 영향을 주지 않음
</aside><aside> ❗
[요구사항 예시]
<aside> ❗
<aside> ❗
// 필드와 매핑할 테이블 컬럼 이름
// 기본값 - 객체의 필드 이름
@Column(name = "name")
// 기본값 - true
// 해당 컬럼이 INSERT 문에 포함될지 여부
@Column(insertable = true)
// 해당 컬럼이 UPDATE 문에 포함될지 여부
// 삽입하고 수정되면 안 되는 경우 updatable = false로 설정 (강제로 업데이트하면 가능)
@Column(updatable = false)
// 기본값 - true
// NotNull 제약조건 (nullable = false)
@Column(nullable = false)
// 이름 반영이 어려워 잘 사용 안 함
// 유니크 제약조건
@Column(unique = true)
// 컬럼 정보를 직접 줄 때 사용
@Column(columnDefinition = "varchar(100) default 'EMPTY'")
// 길이 설정 Ex) varchar(10)
@Column(length = 10);
// BigDecimal, BigInteger에서 사용
// precision은 소수점을 포함한 전체 자릿수
// scale은 소수의 자릿수
// double, float 타입에는 적용되지 않는다.
@Column(precision = 10, scale = 2)
private BigDecimal price;
-> 최대 10자리(소수포함), 소수점 이하 2자리
-> 99999999.99까지 저장 가능
</aside>
<aside> ❗
자바 enum 타입을 매핑
할 때 사용순서를 저장
이름을 저장
주의 !! ORDINAL 사용 X
→ 중간에 ENUM이 추가되면 데이터가 꼬일 수 있다.
원래 USER가 0번이었는데, 처음에 데이터를 추가해도 1번으로 바뀌지 않는다.</aside>