[JPA] JPA 프로그래밍 엔티티 맵핑
JPA 프로그래밍 엔티티 맵핑
@Entity
- “엔티티”는 객체 세상에서 부르는 이름.
- 보통 클래스와 같은 이름을 사용하기 때문에 값을 변경하지 않음
- 엔티티의 이름은 JQL에서 쓰임
- 테이블의 이름과 클래스명이 다르면 @Entity(name = 테이블명)과 같이 설정해야 함
- @Table을 설정하지 않으면 기본적으로 엔티티이름 = 테이블명이 됨
@Table
- “릴레이션” 세상에서 부르는 이름
- @Entity의 이름이 기본값
- 테이블의 이름은 SQL에서 쓰임
@Id
- 엔티티의 주키를 맵핑할 때 사용
- 자바의 모든 primitive 타입과 랩퍼 타입을 사용할 수 있음
- Data랑 BigDecimal, BigInteger도 사용 가능
- 복합키를 만드는 방법도 있지만 여기선 다루지 않음
@GeneratedValue
- 주키의 생성 방법을 맵핑하는 애노테이션
- 생성 전략과 생성기를 설정할 수 있다.
- 기본 전략은 AUTO : 사용하는 DB에 따라 적절한 전략 선택
- TABLE, SEQUENCE, IDENTITY 중 하나
@Column
- unique
- nullable
- length
- columnDefinition
@Column(nullable=false, unique=true)
private String username;
@Temporal
- 현재 JPA 2.1까지는 Date와 Calendar만 지원
@Temporal(TemporalType.TIMESTAMP)
private Date created = new Date(); // 자동으로 객체생성할때마다 현재시간 들어감
@Transient
- 컬럼으로 맵핑하고 싶지 않은 멤버
@Transient
private String yes;
SQL을 보고 싶을 때
application.properties에 다음을 추가
- spring.jpa.show-sql=true
- spring.jpa.properties.hibernate.format_sql=true
추가로 sql에 맵핑되는 값들도 보고 싶을때
로거 설정에 다음을 추가
log4j.logger.org.hibernate.SQL=debug
## logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.tyep=trace