본문 바로가기

JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 엔티티 매핑 - 필드와 컬럼 매핑, 기본키 매핑 ( 2/3 )

- 테스트 요구사항

  • 회원은 일반 회원과 관리자로 구분해야 한다.
  • 회원 가입일과 수정일이 있어야 한다.
  • 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.

 

- @Column

 

- @Enumerated

  • 다바 enum 타입을 매핑할 때 사용
    • 주의! ORDINAL 사용 X
      • STRING TYPE 권장
      • 배열 순서가 변경될 수도 있음
    •  

- @Transient

  • 필드 매핑 X
  • 데이터베이스에 저장X, 조회X
  • 주로 메모리상에만 임시로 어떤 값을 보관하고 싶을 때 사용
    • @Transient
      private Integer temp;

 

- 기본 키 매핑 어노테이션

  • @Id
  • @GeneratedValue
  • @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

 

- 기본 키 매핑 방법(전략)

  • 직접 할당 : @Id만 사용
  • 자동 생성 : @GeneratedValue
    • IDENTITY 전략 : 데이터베이스에 위힘, MYSQL
      • 기본 키 생성을 데이터베이스에 위임
      • 주로 MySQL, PostgreSQL, SQL Server에서 사용
        • ex. MySQL의 AUTO_INCREMENT
      • JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행
        • 그래서 모아서 INSERT를 하지 못한다.
        • 엔티티를 조회해서 1차 캐시에 저장하기 위해서
          • Persist를 호출한 시점에 INSERT 쿼리가 실행된다.(commit을 하지 않아도 실행)
          • https://github.com/oss0202/ex1-hello-jpa/blob/master/src/main/java/hellojpa/JpaMainIdentity.java
          • 의문 ? Select 쿼리가 없다
            • JDBC드라이버에 Insert 하는 시점에 ID 값을 알 수 있다.
            • JDBC드라이버에서 리턴 받은 값영속성 컨텍스트에 넣어준다.
      • AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음
    • SEQUENCE 전략 : 데이터베이스 시퀀스 오브젝트 사용, Oracle
      • @SequenceGenerator 필요
      • 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
      • https://github.com/oss0202/ex1-hello-jpa/blob/master/src/main/java/hellojpa/JpaMainSequence.java
      • 의문? 자꾸 네트워크를 왔다 갔다해야하는데, Insert를 한번 실행하는게 낫지 않나?
        • 성능 증가 가능 -> allocationSize 설정,  default value = 50
        •  
          • Next Call할 때 한 번에 allocationSize만큼 메모리에 저장한다.(DB에는 미리 증가)
          • 여러 웹서버가 있어도 동시성 이슈 없이 해결 가능
            • 각 서버별로 allocationSize를 할당 받아서 이슈가 없음
            • ex. 1서버 50, 2서버 100, 3서버 150, ,...
          • 10,000개 씩 설정하면 좋긴하지만 웹서버 종료 시 구멍이 생겨서 날라갑니다. 구멍이 생겨도 상관이 없지만, 그만큼 낭비가 됩니다. 그래서 50이 적당하다고 합니다.
    • TABLE 전략 : 키 생성용 테이블 사용, 모든 DB에서 사용
      • @TableGenerator 필요
      • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
        • 장점 : 모든 데이터베이스에 적용 가능
        • 단점 : 성능
    • AUTO 전략 : 방언에 따라 자동 지정, 기본값

 

- 권장하는 식별자 전략

  • 기본 키 제약 조건 : null 아님, 유일, 변하면 안된다.
  • 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.
    • ex. 주민등록번호도 기본 키로 적절하지 않다.
  • 권장 : Long형 + 개체키 + 키 생성전량 사용

 

 

 

출처

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com