🔽매핑
🗨️ 데이터베이스 스키마 옵션
<property name="hibernate.hbm2ddl.auto" value="create" /> <!--기존 테이블 삭제 후 다시 생성-->
<!--create-drop : create와 동일하고 종료 시점에 테이블 drop (테스트 시 사용)-->
<!--update : 업데이트만 됨-->
<!--validate : 엔티티와 테이블이 정상 매핑되었는지 확인해줌 -->
• 객체와 테이블 매핑: @Entity, @Table
• 필드와 컬럼 매핑: @Column
• 기본 키 매핑: @Id
• 연관관계 매핑: @ManyToOne,@JoinColumn
🗨️ @Entity
- @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수.
- 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)
- final 클래스, enum, interface, inner 클래스 사용X
- 데이터베이스에 저장할 필드에는 final 사용 X
🗨️ @Table
🗨️ 필드와 컬럼 매핑
@Entity //JPA가 관리해야할 엔티티라는 것을 명시
//@Table(uniqueConstraints = ) unique 제약 조건
public class Member {
@Id
private Long id;
@Column(name = "name", updatable = false, nullable = false, columnDefinition = "varchar(20) default 'EMPTY'") //일반 컬럼
private String username;
@Column(length = 10)
private Integer age;
@Enumerated(EnumType.STRING) //enum 타입 이넘 문자로 저장
// @Enumerated(EnumType.ORDINAL) 기본값, enum 순서를 저장 : enum에 값이 추가되면 숫자가 모두 섞임.
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP) //날짜 타입 : LocalDate, LocalDateTime을 사용하면 생략 가능
private Date createdDate;
private LocalDate lastModifiedDate;
@Lob //varchar 이상의 큰 문자열 : blob(문자 외), clob(문자) 타입과 매핑
private String description;
//@Transient : db와 관계없이 메모리에서만 하고 싶어
🗨️기본 키 매핑
- 직접 할당: @Id만 사용
- 자동 생성(@GeneratedValue)
- AUTO
- 방언에 따라 자동 지정, 기본값
- IDENTITY
- 데이터베이스에 위임
- MySQL의 AUTO_ INCREMENT
- 처음에는 null로 들어감. 그래서 commit 하기 전에 insert 쿼리문을 실행해서 PK값을 가져와서 buffer가 불가능
- SEQUENCE
- 데이터베이스 시퀀스 오브젝트 사용, ORACLE
- 유일한 값을 순서대로 생성
- TABLE
- 키 생성용 테이블 사용, 모든 DB에서 적용 가능하지만 성능이 떨어짐
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉 내내는 전략
- AUTO
🗨️식별자 전략
- Long형 + 대체키 + 키 생성전략 사용
'자바 > JPA 프로그래밍' 카테고리의 다른 글
2. JPA 시작, 내부 구조 (0) | 2024.11.03 |
---|---|
JPA 소개 (0) | 2024.11.02 |