- 도메인 모델을 어떻게 테이블에 맵핑시킬지 하이버네이트에게 알려주는 작업이다.
- 2가지로 분류되며, 어노테이션, xml 설정으로 나뉜다.
@Entity
- 엔티티는 객체 세상에서 부르는 이름이다.
- @Table 이라는 어노테이션이 생략되어있는 것과 같다.
- 속성 값의 이름은 객체의 이름이며, @Table 의 속성 값으로 이름을 변경해야한다.
- 아무런 설정을 주지 않을경우 엔티티 이름이 테이블 이름이 된다.
- @Entity 에서 아무런 속성 값을 주지 않을 경우 클래스이름이 객체의 이름이 된다.
- 즉 @Entity 에서 이름을 주거나 주지 않을 경우 객체의 이름이 정해지며, 객체의 이름이 @Table에 아무런 속성 값을 주지 않을 경우 테이블의 이름이 된다.
@Id
- 엔티티의 PK 를 맵핑할때 사용
- 자바의 원시 타입과 랩퍼타입 사용가능
- Date, BigDecimal, BigInteger 사용가능
- 원시타입은 기본 값이 0, 랩퍼타입은 null 이므로 명시적인 랩퍼타입을 사용하는게 좋음.
- 여러개의 컬럼을 합친 복합키도 생성가능하다.
@GenerateValue
- 자동생성 값을 만들어내는 어노테이션
- DB에 따라 생성 전략과 생성기가 다름.
- 기본 값은 Auto : 사용하는 DB에 따라 자동 선택
strategy 속성
- 생성 전략을 다르게 지정할때 사용
- Table, Sequence, Identity 중 선택
@Column
- unique : 유니크 제약조건 여부
- nullabe : 널 제약조건 여부
- length : 길이
- columnDefinition : SQL 문 직접 명시
날짜 타입의 매핑은 @Temporal
- TemporalType.Date
- TemporalType.Time
- TemporalType.TimeStamp
javax.persistence.Transient : @Transient
- 객체에서만 사용하고 영속화시키지는 않을 때에 사용한다.
@Entity
public class Account {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(columnDefinition = "varchar(255) not null")
private String password;
@Temporal(TemporalType.TIME)
private Date created = new Date();
private String yes;
@Transient
private String no;
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Account account = (Account) o;
return id.equals(account.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Getter, Setter 는 필수 사항이 아니다.
자바 빈 스팩을 따르지만 컬럼 맵핑을 위해 Getter Setter 를 작성하지 않아도 된다. 아마도 Reflection 을 쓰는 듯.
spring.jpa.hibernate.ddl.auto=upate
- 해당 컬럼이 정의되어 있을 경우 컬럼 설정을 바꾼다고 해서 변경사항이 적용되지 않는다.
쿼리 로그
- spring.jpa.show-sql=true : 하이버네이트 쿼리 생성 로그를 띄움
- spring.jpa.properties.hibernate.format_sql=true : 하이버네이트가 생성한 쿼리를 보기 편하게 만들어 준다.
# show sql
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
'springframework > Spring Data JPA' 카테고리의 다른 글
관계 맵핑, 1 : N (0) | 2020.11.13 |
---|---|
Value 타입 맵핑 (0) | 2020.11.13 |
JPA 실행하고 적용하기 (0) | 2020.11.09 |
ORM 패러다임 불일치 (0) | 2020.11.08 |
JPA 개요 (0) | 2020.11.08 |