일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 페치조인
- 프로젝트생성
- 대량쿼리
- jQueryUI
- 페이징
- 제네릭
- values()
- 자바서블릿
- joinfetch
- paging
- 엔티티직접사용
- Hibernate
- JPA
- Generic
- javascriptcalendar
- 제너릭
- 스프링데이터흐름
- namedQuery
- springflow
- fullcalendar
- JQuery
- jQuery값전달
- JPQL
- calendar
- jQuery값전송
- jscalendar
- LIST
- 벌크연산
- javaservlet
- fetchjoin
- Today
- Total
가자공부하러!
Hibernate(4) - 엔티티 매핑 본문
1. 엔티티 매핑 종류
> 객체와 테이블 매핑 : @Entity, @Table
> 필드와 컬럼 매핑 : @Column
> 기본 키 매핑 : @Id
> 연관관계 매핑 : @ManyToOne, @JoinColumn
2. 객체와 테이블 매핑
> @Entity
- NoArgs 생성자 필수
- final 클래스, enum, interface, inner 클래스 불가
- 필드에 final 불가
> @Table(name = "DB테이블이름", catalog = "", schema = "", uniqueConstraints = "")
3. DB스키마 자동 생성
> 애플리케이션 실행 시점에 테이블을 만들 수 있음
> 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
> 방법 : persistence.xml에 설정값 입력 -> <property name="hibernate.hbm2ddl.auto" value="옵션"/>
> 옵션 : create, create-drop, update, validate, none
- update옵션에서 컬럼추가는 가능하지만 컬럼 삭제는 안된다.
> 주의
- 운영장비에는 절대 create, create-drop, update를 사용하면 안된다.
- 개발 초기 단계는 create또는 update, 테스트 서버는 update또는 validate, 스테이징과 운영 서버는 validate또는 none
> @Column(unique = true, length = 10, nullable = false)
- DB에 제약조건을 설정해준다. JPA 실행 로직에는 영향을 주지 않는다.
4. 필드와 컬럼 매핑
> @Column()이 가질 수 있는 속성
> @Enumerated()가 가질 수 있는 속성
- EnumType.ORDINAL을 사용하면 심각한 버그가 발생할 수 있기 때문에 사용하지 않는 것을 권장
> @Lob
- 매핑하는 필드 타입에 따라서 문자인 경우 CLOB, 나머지는 BLOB
> @Transient
- 필드 또는 메소드가 영속하지 않음을 표시
- DB와 관련없이 동작할 필요가 있는 경우에 사용
- 필드와 메소드는 매핑에서 제외되며, 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶은 경우에 사용한다.
5. 기본 키 매핑
> @Id : 직접할당
> @GeneratedValue : 자동생성
- (strategy = GenerationType.AUTO)
- DB특성에 맞게 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택해줌
- (strategy = GenerationType.IDENTITY)
- MySQL계열의 auto_increment에 대응
- auto_increment는 DB에서 수행하기 때문에 객체가 영속성 컨텍스트로 insert될 때 1차 캐시에는 null로 저장되는 문제가 있다.
- 문제를 방지하기 위해 예외적으로 insert가 즉시 실행되어 ID를 리턴하고 영속성 컨텍스트에 PK로 저장된다.
- (strategy = GenerationType.SEQUENCE)
- 시퀀스 오브젝트를 만들어줌
- 직접 만든 시퀀스를 사용하고 싶다면 @SequenceGenerater를 사용하면 됨
- allocationSize의 기본값이 50이므로 하나씩 증가하도록 1로 설정해주어야 함
- 성능최적화를 위해 nextVal()할 때 미리 50개를 가져온다. 이 때, DB에는 50이 한번에 증가되고 메모리에서는 1씩 사용하는 방법.
- (strategy = GenerationType.TABLE)
- 시퀀스와 유사하게 사용
- 성능이 떨어질 가능성이 있음
'공부 > Java' 카테고리의 다른 글
Hibernate(6) - 프록시, 즉시/지연 로딩, 연관관계 관리 (0) | 2019.11.22 |
---|---|
Hibernate(5) - 연관관계 매핑 (0) | 2019.11.20 |
Hibernate(3) - JPA 영속성 컨텍스트, 플러시, 준영속 상태 (0) | 2019.11.20 |
Hibernate(2) - JPA 기본 CRUD 연습 (0) | 2019.11.19 |
Hibernate(1) - ORM? Hibernate? (0) | 2019.11.06 |