JPA 를 이해하는데 가장 중요한 용어
객체의 엔티티들을 영구히 저장하는 환경
@ Entity 가 붙은 클래스는 JPA가 관리 한다는 의미
JPA 영역안에 있는 Class 와 jpa 테이블과 매핑할 때
@Entity 어노테이션을 필수로 생성해야한다.
기본 생성자 는 정의는 필수 ( Java Class 가 알아서 하긴함 )
ex) enum, interface 같은 클래스는 @Entity 어노테이션이 사용불가능하다.
전역 필드에 final 키워드를 사용할 수 없다.
( 전역에서 활용해야 하기 때문 )
속성 name
JPA 에서 사용할 Entity 이름
( 기본값으로 하는 것을 권장 )
+ 영속 상태 : jpa 에 속한 상태
-flush()가 호출되는 시점에 Entitiy 와 스냅샵을 전부 비교 후 변경이 된 것을 감지 (Dirty Checking ) 한 후에 update 쿼리를 작성 후 , update 쿼리를 넘긴다.
tx.begin() // 영속 엔티티 조회 member memberA = new em.find( Member.class , "MemberA"); memberA.setUsername(" 테이블에 설정할 이름 ) ; memberA.setAge(10); //em.update(member); tx.comit();
Member memberA = em.find(Member class , "memberA"); // Member 데이터 테이블에서 memberA 를 조회후 삭제 em.remove(memberA);
- em.flush() : 직접호출
- 트랜잭션 커밋 : 플러시 자동 호출
- JPQL 쿼리실행 : 플러시 자동 호출
영속 상태의 엔티티가 영속성 컨텍스트에서 분리
비 영속 -> 영속 -> 준 영속
순서로 이동한다
영속 상태와 달리
영속성 컨텍스트가 제공하는 기능을 사용하지 못한다.
- em.detach(entity)
특정 엔티티만 준 영속상태로 전환시키는 메소드- em.clear()
영속성 컨텍스르르 완전히 초기화- em.close()
영속성 컨텍스트를 종료**
객체와 테이블 매핑 : @Entity, @table
=테이블 명을 바꾸고 싶을 때 사용
필드와 컬럼 매핑 : @ Column
기본키 매핑 : @Id
연관관계 매핑 : @ManyToOne, @JoinColumn
- name
매핑할 테이블의 이름
- catalog
데이터베이스의 catalog 매핑
- schema
데이터베이스의 스키마 매핑
- DDL ( uniqueConstraints / 특정 제약조건 )
DDL 생성시 , 특정 제약조건을 명시할 때 사용
DDL 을 애플리케이션 실행 시점에
테이블 자동생성 한다는 것은 테이블 중심 개발에서
객체 중심 개발 로 하겠다는 의미
( 테이블 중심 개발 -> 객체 중심 개발 )
DB 방언을 활용해서 DB에 맞는 적절한 DDL 을 생성한다
- DB 스키마 자동 생성 옵션
.xml 파일에서 선언 가능하다
- create ( 주로 사용 )
기존 테이블을 삭제 후 다시 생성 한다
= 테이블 DROP 과 CREATE 를 동시에
- create-drop
테이블을 생성하나, 종료시점에 모든 테이블을 drop 시키는
일회성 테이블
- update ( 주로 사용 )
테이블 변경부분만 반영한다.
- validate
엔티티와 테이블이 정상적으로 매핑되었는지 확인
- none
테이블을 사용하지 않겠다는 선언
@Column() - 필드와 컬럼을 매핑
비지니스 로직
= 회원 이름 기입 필수, 길이는 10자 라는 제약조건을 설정할 때
@Column 을 사용한다
- ex)
@Column( nullable = false , length = 10 )
= 정보 입력 필수 , 길이는 최대 10자
@Temporal : 날짜 타입 매핑
@Enumerated : enum 타입 매핑
@Lob : BLOB, CLOB 매핑
@Transient : 특정 필드를 컬럼에 매핑하지 않을 때 사용
- name
필드와 매핑할 테이블의 컬럼 이름
- nullable = T or F
null 값의 허용 여부 설정
( true 라면 null 허용
false 라면 null 불가능 )
- unique
한 컬럼에 대해 unique 제약조건을 선언할 때 사용
( 다중 unique 조건 설정은 @Table 어노테이션에서 선언 )
- length
문자 길이 제약조건 , String 변수에만 사용가능
@ID
기본 키를 직접 할당
@GeneratedValue
전략 : 자동생성 하는 기능을 사용하는 용어
= 기본키 를 자동생성 하는 어노테이션
개발자가 기본키를 직접 선언하지 않고
JPA 가 알아서 기본키를 설정하게 만든다전략 설정(자동생성)을 어떻게 하느냐에 따라
JPA 가 선택하는 기본키가 달라진다.
- auto(기본값) = 방언에 맞춰 자동지정
- identity = 데이터베이스에 의임
- sequenmce = 데이터베이스의 시퀀스 오브젝트 사용 시
( , @SequenceGenerator 필요 )- table = 키 생성용 테이블 사용, 모든 DB에서 사용
@SequenceGenerator
- name = 이름
- sequenceName = 데이터베이스 등록되어 있는 시퀀스 이름
ex) hibernate_sequence- initialValue = 시퀀스 DDL 을 생성할 때, 처음 시작하는 수 지정
- allocationSize = 데이터베이스 시퀀스 값이 하나씩 증가 하도록 설정
이 값을 1로 설정하는 것을 권장한다.- catalog,scheme = 카탈로그 스키마 설정값 ,
( DB 방언에 맞춰 요구한다면 설정해야하는 속성 값. )
@Id @GeneratedValue( strategy = GenerationType.SEQUENCE) // id 값을 시퀀스로 자동생성해라 private String id;