- 객체와 테이블 매핑 :
@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;
@TransientDB에는 저장하지 않지만, 일시적으로 객체에 저장하고 싶은 값에 사용한다.
@AccessJPA가 엔티티 데이터에 접근하는 방식을 지정한다.
설정하지 않으면,@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의 기능에는 영향을 주지 않는다.
하지만, 엔티티 구성만 보고도 테이블을 파악할 수 있다는 장점이 있다.