1. 플러시 발생
영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
변경 감지
수정된 엔티티 쓰기 지연 SQL 저장소에 등록
쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리)
2. 영속성컨텍스트를 플러시하는 방법
트랜잭션 커밋 - 플러시 자동 호출
em.flush() - 직접 호출
jpql 쿼리 시행 - 플러시 자동 호출
3. 플러시 주요사항
영속성 컨텍스트를 비우지 않음
영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화
트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨
JPA는 동시성, 데이터를 맞추거나 등을 모두 트랜잭션에 위임한다.
객체와 테이블 매핑 : @Entity
, @Table
필드와 컬럼 매핑 : @Column
기본 키 매핑 : @Id
연관관계 매핑 : @ManyToOne
, @JoinColumn
1. 객체와 테이블 매핑 - @Entity
@Entity
가 붙은 클래스는 JPA가 관리하는 엔티티라 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity
필수
주의사항
-> 기본 생성자 필수(파라미터가 없는 public 또는 protective 생성자)
-> final 클래스, enum, interface, inner 클래스 사용x
-> 저장할 필드 final 사용x
2. @Entity name속성
3. @Table
- 운영장비에는 절대
create
,dreate-drop
,update
사용하면 안됨- 개발초기 단계는
create
또는update
- 테스트 서버는
update
또는validate
- 스테이징과 운영 서버는
validate
또는none
만약 회원이름을 필수, 10자 초과 제약 조건을 추가한다면
@Column(nullable=false, leength=10)
유니크 제약조건을 추가한다면
@Table(uniqueConstraints={
@UniqueConstraints(name="NAME_AGE_UNIQUE", columnNames={"NAME", "AGE"})
})
=> DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
@Column
: 컬럼 매핑@Column
- name : 필드와 매핑할 테이블의 컬럼 이름
- nullale : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성시에 non null 제약조건이 붙는다.
- unique : @Table uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약 조건을 걸 떄 사용한다.
- length : 문자 길이 제약조건, String 타입에만 사용
@Temporal
: 날짜 타입 매핑@Enumerated
: enum 타입 매핑@Lob
: BLOB, CLOB 매핑@Transient
: 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)->
IDENTITY
: 데이터베이스에 위임, MYSQL, SQL Server, DB2 이러한 개념이 들어있어야 사용
->SEQUENCE
: 데이터베이스 시퀀스 오브젝트 사용 , ORACLE, PostgreSQL, DB2, H2에서 사용(@SequnceGenerator 필요)
->TABLE
: 키 생성용 테이블 사용, 모든 DB에서 사용(@TableGenerator필요)
->AUTO
: 방언에 따라 자동 지정, 기본값
->AUTO
는 DB방언에 맞춰서 IDENTITY, SEQUENCE, TABLE 3개의 방식 중 하나가 선택이 된다.