2023. 5. 21. 14:30ㆍBackEnd(Java)/JPA 개념
✅ 아래 내용들에 대해서 알아보자
- @Entity
- @Table
@Entity
@Entity가 붙은 클래스는 JPA 관리하는 엔티티가 된다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수!
@Entity 속성
name
- JPA에서 사용할 엔티티 이름 지정
- 클래스 이름이 default 값이다.
- 같은 클래스 이름 없으면 가급적 기본값 권장
@Entity 사용 시주의사항
1. JPA 구현체(ex. Hibernate)는 엔티티 객체를 생성할 때 기본생성자를 사용한다.(필수)
-> JPA는 앤티티 객체로 변환하기 위해 Java의 리플랙션을 사용하는데, 이때 JPA 구현체는 앤티티 객체를 생성하기 위해 기본생성자를 호출하여 객체를 초기화한다.
2. JPA는 프락시 객체를 사용하여 지연로딩을 구현하는데 Proxy 객체는 엔티티 클래스를 상속하고, 엔티티 객체의 초기화를 지연시킨다. JPA 구현체인 Hibernate는 Proxy 객체를 생성하기 위해 CGLIB 또는 JDK 다이나믹 프록시를 사용하여 Proxy 객체를 생성하는데 이러한 Proxy 방식에서 기본생성자가 필요로 함!!
3. JPA 엔티티 객체를 생성한 후 기본 생성자를 통해 엔티티 객체를 생성하고, 필드 값을 초기화한다.
4. final 클래스, enum, interface, inner 클래스에 @Entity 사용 불가
5. DB에 저장하려는 엔티티의 필드에 final 사용 불가
@Table
@Table은 엔티티와 매핑할 테이블 지정할 떄 사용한다.
@Table 속성
1. name
- 매핑할 테이블 이름 설정
- 엔티티 이름을 기본값으로 사용한다.
2. schema
- 매핑될 테이블의 스키마를 지정한다.
3. catalog
- 매필될 테이블의 카탈로그를 지정함
- 생략이 가능하다.
4. uniqueConstraint
- DDL 생성 시에 유니크 제약 조건 정의한다.
- 배열로 여러 개의 유니크 조건을 지정할 수 있다.
5. indexes
- 테이블에 대한 인덱스를 정의한다.
h2 DB로 테스트 진행하였고 실제 유니크 제약조건과 인덱스가 생성된 것을 볼 수 있다.
'BackEnd(Java) > JPA 개념' 카테고리의 다른 글
OSIV (0) | 2023.06.11 |
---|---|
값 타입 (0) | 2023.05.22 |
영속성 컨텍스트 (0) | 2023.05.17 |