JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙인다.
@Entity가 붙은 클래스는 JPA가 관리하고, 엔터티라 부른다.
기본 생성자 필수(파라미터가 없는 public or protected 생성자)
final, enum, interface, inner 클래스에 사용 X
저장할 필드에 final 사용 X
@Entity
@Table(name = "USER")
public class User
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "NAME")
private String userName;
@Column(name = "age")
private Integer age;
// 자바 enum 타입은 @Enumerated 어노테이션으로 매핑
@Enumerated(EnumType.STRING)
private RoleType roleType;
// 자바의 날짜 타입은 @Temporal을 사용해서 매핑
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
// 회원을 설명하는 필드는 길이 제한이 없는 CLOB 타입으로 저장해야 합니다.
@Lob
private String description;
public enum RoleType{
ADMIN, USER
}
옵션 | 개념 |
---|---|
create | 기존 테이블 삭제 후, 생성 -> DROP + CREATE |
create-drop | 종료 시, 생성한 DDL을 제거 -> DROP + CREATE + DROP |
update | 데이터베이스 테이블과 엔터티 매핑 정보를 비교해서 변경 사항 수정 |
validate | 매핑 정보를 비교해서 차이가 있으면 경고 후, 애플리케이션을 실행 X DDL 수정 X |
none | 자동 생성 기능을 사용하지 않으려면 hibernate.ddl-auto 속성 자체를 삭제 or 유효하지 않는 옵션 값을 주면 된다. |
spring:
jpa:
hibernate:
ddl-auto: create
직접 할당 : 기본 키를 어플리케이션에서 직접 할당
자동 생성 : 대리 키 사용
IDENTITY : 기본 키 생성을 데이터베이스에 위임
@Entity
@Table(name = "USER")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
enum Role{
ADMIN, USER
}
@Enumerated(EnumType.STRING)
private Role role;
member.setRole(Role.ADMIN);
// 예시 코드는 @Access 생략 가능
@Entity
@Access(AccessType.PROPERTY)
public class User{
private String id;
private String data1;
private String data2;
@Id
public String getId(){
return id;
}
@Column
public String getData1(){
return data1;
}
public String getData2(){
return data2;
}
}