객체와 테이블 매핑
!!주의!!
속성
@Entity(name = "Member")
속성
@Table(name="MBR",
uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",columnNames = {"NAME", "AGE"} )})
public class Member {
속성 (persistence의 hibernate.hbm2ddl.auto 옵션)
<property name="hibernate.hbm2ddl.auto" value="create" />
!!주의!!
제약조건 추가 : 회원 이름 필수, 10자 초과 X
@Column(nullable = false, length = 10)
유니크 제약조건 추가
@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",columnNames = {"NAME", "AGE"} )})
필드와 컬럼 매핑
요구사항
1. 회원은 일반 회원과 관리자로 구분해야 한다
2. 회원가입일과 수정일이 있어야 한다
3. 회원을 설명할 수 있는 필드가 있어야 하고 길이 제한은 없다
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
//ORDINAL 타입은 사용하지 않음, 새로 추가되었을 경우 꼬일 수 있기 때문에
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
}
//Getter, Setter...
@Column 속성
@Temporal 속성
private LocalDate orderDate;
private LocalDateTime orderDate;
@Enumerated 속성
@Lob
@Transient
기본키 매핑
@Id
private Long id;
2-1. IDENTITY
- 기본 키 생성을 데이터 베이스에 위임
- 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용(ex. MySQL의 AUTO_INCREMENT)
- IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
2-2. SEQUENCE
- 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트(예: 오라클 시퀀스)
- 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용
@Entity
@SequenceGenerator(
name = “MEMBER_SEQ_GENERATOR",
sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
private Long id;
2-3. TABLE
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉 내내는 전략
- 장점: 모든 데이터베이스에 적용 가능
- 단점: 성능
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;