@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
• JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
• 주의
final 클래스, enum, interface, inner 클래스 사용 X
기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 저장할 필드에 final 사용 X
속성: name
@Table은 엔티티와 매핑할 테이블 지정



@Column(nullable = false, length = 10)
@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"} )})
운영 서버에서는 DDL로 실행한 SQL을 가져와서 다듬거나 직접 짠다.
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
}


자바 enum 타입을 매핑할 때 사용 주의!
ORDINAL 사용X
날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)
CLOB: String, char[], java.sql.CLOB
BLOB: byte[], java.sql. BLOB
기본 키 매핑 어노테이션
@Id @GeneratedValue

• 기본 키 생성을 데이터베이스에 위임
• 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용
(예: MySQL의 AUTO INCREMENT)
• JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행
• AUTO INCREMENT는 데이터베이스에 INSERT SQL을 실행
한 이후에 ID 값을 알 수 있음
• IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회


키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
장점: 모든 데이터베이스에 적용 가능
단점: 성능




여기서 Order를 보면 Long 타입이고 find를 하게 되면 Member객체가 아닌 Long을 가지고 온다.
그럼 Member를 가져오려면 또 find를 해야하는데 이건 테이블 중심 설계이기 때문에 객체스럽지가 않다.
이제 연관관계 매핑을 사용해봐야한다.