- 객체와 테이블 매핑 :
@Entity
,@Table
- 기본 키 매핑 :
@Id
- 필드와 컬럼 매핑 :
@Column
- 연관 관계 매핑 :
@ManyToOne
,@JoinColumn
@Entity
테이블과 매핑할 클래스를 지정한다.
final
을 사용하면 안된다@Table
엔티티와 매핑할 테이블을 지정한다.
@Table(name = "MEMBER")
public class Member {
.
.
.
}
@Column
필드와 테이블의 컬럼을 매핑해준다.
속성 중에nullable = true
가 기본 값이므로,
자료형이 자바 기본형인 경우에는 nullable = false
를 해주는것이 안전하다.
@Enumerated
자바의 enum을 사용해서 roleType 필드를 구분한다.
value = EnumType.ORDINAL
은 0과 1 ... 순서대로 저장한다. 크기가 작다.
value = EnumType.STRING
은 문자 그대로 저장한다. 중간에 순서가 바뀌거나, 다른 값들이 추가되어도 안전하다.
public enum RoleType {
ADMIN, USER
}
...
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal
자바의 날짜 타입을 매핑한다.
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Lob
길이 제한이 없는 필드를 매핑한다. DB에 CLOB, BLOB 타입으로 저장된다.
@Lob
private String description;
@Transient
DB에는 저장하지 않지만, 일시적으로 객체에 저장하고 싶은 값에 사용한다.
@Access
JPA가 엔티티 데이터에 접근하는 방식을 지정한다.
설정하지 않으면,@Id
의 위치를 기준으로 접근 방식이 달라진다.
즉,@Id
가 필드에 있는지,Getter
에 있는지가 중요하다.
private
여도 접근할 수 있다. Getter
)를 사용해서 접근한다.@Entity
public class Member {
@Id
private Long id;
@Transient
private String firstName;
@Transient
private String lastName;
@Access(AccessType.PROPERTY)
public String getFullName(){
return this.firstName + this.lastName;
}
}
application.properties 파일에
spring.jpa.hibernate.ddl-auto=
- create : DROP + CREATE
- create-drop : DROP + CREATE + DROP
- update : DB의 테이블과 엔티티 매핑 정보를 비교해서 변경 사항만 수정
- validate : 엔티티 매핑정보와 DB의 테이블 정보를 비교해서 다르면 경고+실행❌
- none : 자동 생성 기능 사용 ❌
@Table(uniqueConstraints = { @UniqueConstraint(
name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"} )})
public class Member {
@Column(nullable = false, length = 10)
private String userName
...
}
uniqueConstraints
: unique 컬럼의 조합이 유일해야 한다.NAME
컬럼과 AGE
컬럼의 조합이 유일해야 한다.NULL
은 데이터로 간주하지 않기 때문에 중복이 가능하다.nullable
: DDL에 NOT NULL
조건을 추가할 수 있다.length
: 문자의 크기가 10자리로 제한된다.DDL문을 생성할 때만 사용되는 것이다. JPA의 기능에는 영향을 주지 않는다.
하지만, 엔티티 구성만 보고도 테이블을 파악할 수 있다는 장점이 있다.