Entity 매핑
객체와 테이블 매핑
@Entity가 붙은 클래스를 JPA가 entity로 관리합니다. 그리고 꼭 파라미터가 없는 생성자가 필수로 있어야합니다. 또 클래스를 이름이 다른 테이블과 매핑하고싶다면 @Table안에 name속성에 적어주면 됩니다. UNIQUE조건은 uniqueConstrains에 적어주면 됩니다. 컬럼수준에서도 unique조건을 달아줄 수 있지만 생성되는 이름이 더 복잡해지고 여러 컬럼에 unique조건을 걸어줄 수 없기 때문에 @Table로 하는 방식이 더 권장됩니다. 단 이기능은 DDL자동생성시에만 적용됩니다.
@Entity // JPA가 인식
@Table(name = "MBR",
uniqueConstraints={
@UniqueConstraint(columnNames={"column1","column2"})}
)
public class Member {
....
public Member() {
}
}
데이터베이스 스키마 자동생성
DDL(CREATE, DROP...)을 어플리케이션 실행 시점에 자동으로 생성해줍니다! 하지만 이렇게 생성된 DDL은 바로 사용하기에는 위험이 따르기때문에 수정을 해서 사용하거나 개발시에만 사용이 권장됩니다.
물론 무조건 DDL이 적용되는 것은 아니고 그 정도도 선택할 수 있습니다.
persistence.xml에서 hibernate.hbm2ddl.auto라는 옵션으로 설정이 가능합니다
자동으로 DDL생성을 원하지 않으면 주석처리를 해주시거나 쓰지 않으면 됩니다🤗
DDL 생성기능
DDL 생성기능은 JPA 실행로직에 영향을 주지 않는 것들을 말합니다. 예를들면 unique나 length, nullable이 있습니다.
필드와 컬럼 매핑
필드차원에서의 매핑 어노테이션을 살펴보면 아래와 같습니다
@Entity
public class Member {
@Id //pk매핑
private Long id;
@Column(name = "name") // 컬럼 이름따로 매핑
private String username;
private Integer age;
@Enumerated(EnumType.STRING) // enum 타입 매핑
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP) // 날짜 타입 매핑
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob // 용량 큰 데이터
private String description;
}
어노테이션 별로 자세히 살펴보겠습니다
종류(옵션아니고 자동으로 이렇게 된다)