JPA 강의 스터디 2

송현진·2023년 5월 9일
0

Jpa

목록 보기
4/9
post-thumbnail

엔티티

실체, 객체

데이터베이스에서 한 건의 자료를 구성하는 레코드를 말함. 엔티티 사이의 관계를 relationship이라 하고, 도표로 나타낸 것을 ERD(Entity Relationship Diagram)이다.

객체와 테이블 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리
  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
  • 기본 생성자 필수
  • final 클래스, enum, interface, inner 클래스 사용 X
  • 저장할 필드에 final 사용 X

속성:name

  • @Entity(name "Study")
  • JPA에서 사용할 엔티티 이름 지정
  • 기본값 : 클래스 이름을 그대로 사용
  • 같은 클래스 이름이 없으면 가급적 기본값 사용

@Table

  • 엔티티와 매핑할 테이블 지정
  • @Table(name = "")
  • 매핑할 테이블 이름을 지정
  • 기본값 : 엔티티 이름 사용

필드와 컬럼 매핑 : @Column

기본 키 매핑 : @Id

연관관계 매핑 : @ManyToOne, @JoinColumn

데이터 베이스 스키마 자동 생성

  • DDL을 애플리케이션 실행 시점에 자동 생성
  • 테이블 중심 -> 객체 중심
  • 데이터 베이스 방언을 활용해 데이터베이스에 맞는 적절한 DDL 생성
  • 개발 장비에서만 사용하고 운영 서버에서는 사용하지 않는다.

운영 장비는 절대 create, create-drop, update 사용하면 안된다.

테스트 서버는 update 또는 validate를 사용한다.

웬만하면 validate나 none을 쓰는 것이 좋다. 데이터가 많은 상태에서 alter를 했을 때 자칫 시스템 중단의 위험성이 있다.

필드와 컬럼 매핑



💡EnumType.ORDINAL은 사용하지 않는다.
-> 요구 사항에 따라 새로운 TYPE이 추가될 수 있기 때문에 순서가 변경될 수 있다. 즉, 어떤 값을 제일 앞에 추가했을 때 원래 첫번째였던 값이 0이었다 추가된 값도 0이 되기 때문에 문제가 된다. 그래서 EnumType.String을 사용해야한다.

@Lob

DB에서 VARCHAR를 넘어서는 큰 내용을 넣고 싶을 경우 사용한다.

  • CLOB: String, char[], java.sql.CLOB
  • BLOB: byte[], java.sql.BLOB

기본 키 매핑

업로드중..

IDENTITY

  • 트랜잭션 커밋 시점에 INSERT SQL 실행
  • AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있다.
  • IDENTITY 전략은 persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회한다.
  • 즉, 1차 캐시 안에 있는 @Id 값은 DB에 넣기전까지 세팅 할 수 없다. persist되어 있을 때 가져오려고 한다면 INSERT문이 실행되고 가져올 수 있다.

SEQUENCE

  • 데이터베이스 시퀀스는 '유일한 값'을 '순서대로'생성하는 특별한 데이터베이스 오브젝트
  • allocationSize : 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨) default 값은 50이다. 즉 호출할 때 일일히 DB에 가지않고 미리 DB에 50개를 한 번에 올려 놓고 메모리 상에서 1개씩 쓰는 것이다.

TABLE

  • '키 생성 전용 테이블'을 하나 만들어서 '데이터베이스 시퀀스'를 흉내내는 전략

AUTO

  • 기본 설정값이다. persist하고 @Id 값을 가져오려고 하면 insert문은 날아가지않고 seq값을 받아온다.
profile
개발자가 되고 싶은 취준생

0개의 댓글