이는 JPA가 인식하기 위한 어노테이션이다.
DDL을 어플리캐이션 실행 시점에 자동 생성한다.
데이터베이스 방언을 활용해서 데이터배이스에 적절한 DDL을 작성해준다.
하지만 이렇게 생성된 DDL은 운영단계에서는 사용하지 않고, 조금 개선해서 사용하는편이다.
운영장비에는 create, create-drop, update 절대 안된다
개발초기에는 로컬서버라서 상관이 없다
테스트 서버는 update, validate를 써야한다. drop을 쓰면 다 지워지기때문이다. 가능하면 validate를 쓴다.
스테이징과 운영서버는 validate를 쓰거나 아예 쓰면 안된다.
제약조건을 추가할 수 있다.
@Column(nullable = false, length = 10)
@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"} )})
혹은 이름을 줄 수 있다.
@Column(name = "name")
private STring userName;
이러면 name을 가진 생성자가 생긴다.
또는, Type을 설정해줄 수 있다.
@Column 컬럼 매핑
@Temporal 날짜 타입 매핑
@Enumerated enum 타입 매핑
@Lob BLOB, CLOB 매핑
@Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)
직접 할당할 경우 @Id를 쓰고, @GeneratedValue를 쓰면 Auto_Increment처럼 자동할당으로 처리해준다.
기본 키 제약 조건 : not null, 유일, 변하면 안된다.
하지만 이를 만족하는 자연키를 찾기는 어렵다. 따라서 대리키, 대체키를 사용하는것이 좋다.
권장 : long형 + 대체키 + 키 생성 전략 사용
지금까지 배운데로 모델을 만들어보면, 객체지향적이기보단 DB지향적인것을 알 수 있다.
외래키가 객체에 그대로 들어오고, UML도 망가지게 된다. 따라서 연관관계 매핑으로 객체지향적 설계를 해야한다.