JPA #4

KimSeonGyu·2023년 7월 29일
0

JPA

목록 보기
4/5
post-thumbnail

Entity Mapping

@Entity

메인 객체를 관계형 데이터베이스 테이블로 맵핑할 때 @Entity 어노테이션을 사용
@Entity 어노테이션만 선언했을 때 테이블 이름은 클래스 이름이 되고 대/소문자 치환은 일어나지 않는다.
대부분은 RDBMS는, 대/소문자를 가리지 않으므로 기본 JPA 작명규칙이 문제를 발생하지는 않는다.
@Table 어노테이션을 사용해서 테이블 이름을 명시적으로 표기할 수 있다.

@Table

관습적인 테이블 설계 방법에서 테이블 이름은 대문자에 "” 를 많이 사용.
@Table 어노테이션은 스키마를 지정하거나 테이블 이름을 구체적으로 명시한다.
특정 RDBMS는 스키마 지정을 테이블 이름에 포함할 수 있기에 "SA.USER” 로 스키마 지정이 가능
@Table("name= USER” , catalog= "CATALOG”)로 카탈로그 지정이 가능하다. 
@Table 속성
name매핑 할 테이블의 이름
catalog데이터베이스 카탈로그 매핑
schema데이터베이스 스키마 매핑
uniqueContrainsDDL 생성에서 unique 제약조건 생성

uniqueContrains 기능은 스키마가 자동 생성 되어 있어야한다.

스키마 자동생성 옵션 방법
persistence.xml 에 아래 property 설정

<property name="hibernate.hbm2ddl.auto" value="create" />

<!-- valuer 값 : create, create-drop, update, validate, none-->

위값을 추가하면 데이터베이스에 테이블이 없어도 자동으로 프로그램이 실행될때 테이블을 생성해 준다.

  1. "create": Hibernate가 데이터베이스 스키마를 새로 생성한다. 즉, 애플리케이션 실행 시점에 기존의 데이터베이스 스키마를 삭제하고 새로운 스키마를 생성한다. 주의해야 할 점은 기존의 데이터가 모두 삭제되고 새로운 스키마가 생성되므로, 개발 환경에서만 사용하거나 초기 개발 단계에서만 사용하는 것이 좋다.
  2. "update": Hibernate가 데이터베이스 스키마를 업데이트 한다. 즉, 애플리케이션 실행 시점에 현재 엔티티 클래스들과 데이터베이스 스키마를 비교하여 변경된 부분만 업데이트를 진행한다. 기존의 데이터는 유지되며, 변경된 엔티티의 구조만 반영된다.
  3. "validate": Hibernate가 데이터베이스 스키마를 유효성 검사만 수행한다. 즉, 현재 엔티티 클래스들과 데이터베이스 스키마를 비교하여 차이가 있는지 확인하지만, 변경된 내용을 데이터베이스에 적용하지는 않는다. 오류가 발생하는지 확인하기 위해 사용할 수 있다.
  4. "create-drop": Hibernate가 데이터베이스 스키마를 생성하고, 애플리케이션 종료 시점에 다시 삭제한다. 즉, 애플리케이션이 실행되는 동안에만 데이터베이스를 사용하고, 애플리케이션 종료 시점에는 스키마를 삭제한다. 주로 개발 환경에서 임시로 사용하거나 테스트 용도로 사용된다.

접근방식

JPA 에서 객체 접근방식은 크게 '필드 접근방식'과 '프로퍼티 접근방식'으로 나뉜다. @Id 어노테이션의 위치에 따라 접근방식이 달라지게된다.

@Entity
public class Category {

	@Id
    private Long id;
}

위 코드와 같이 필드(field)위에 @Id 어노테이션이 붙으면 필드 접근방식이 된다.

반대로 getter 혹은 setter 에 @Id가 붙으면 프로퍼티 접근방식이 된다. 통상적으로 필드 접근 방식을 사용한다.


Primary Key Mapping

기본키(Primary Key)는 애플리케이션과 데이터베이스 양쪽에서 생성이 가능하다.

애플리케이션에서 생성하는 기본키:

  • UUID(Universally Unique Identifier)나 시퀀스(sequence)를 사용하여 애플리케이션에서 기본키를 생성한다.

데이터베이스에서 생성하는 기본키:

  • 데이터베이스가 제공하는 자동 증가(Auto-Increment) 기능을 사용하여 기본키를 생성할 수 있다. 이 경우 데이터베이스가 기본키를 자동으로 생성하고 엔티티에 할당한다.

일반적으로 데이터베이스에서 기본키를 생성한다. 그 이유는 데이터베이스가 기본키를 생성하고 관리하면 애플리케이션에서는 기본키 생성에 대해 걱정할 필요가 없고, 데이터베이스가 중복된 값을 방지하고 일관성을 유지할 수 있기 때문이다.


@GeneratedValue

데이터베이스가 기본키를 자동으로 생성하는 경우, JPA에서는
@GeneratedValue 어노테이션을 사용한다.

@GeneratedValue 어노테이션의 속성으로 기본키 생성 전략을 정할 수 있다.

@GeneratedValue 속성
identity기본키 생성 처리를 데이터베이스에 위임
sequence시퀀스를 이용한 기본키 생성
table별도의 기본키 테이블을 이용해 기본키 생성
auto데이터베이스에 따라 기본키 생성 전략 선택(default)
profile
공부한 내용을 작성하는 블로그 입니다. 수정할 부분이 있다면 편하게 댓글 작성부탁드립니다!

0개의 댓글