Spring JPA Annotation

·2022년 1월 31일
0

javax.persistence 패키지 안에 수많은 어노테이션 인터페이스들이 존재한다.

JPA 엔티티와 매핑 관계

객체와 테이블 매핑: @Entity, @Table
기본 키 매핑: @Id
필드와 컬럼 매핑: @Column
연관관계 매핑: @ManyToOne, @JoinColumn

@Entity

  • 데이터베이스의 테이블과 일대일로 매칭되는 객체 단위
  • Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미한다.
  • 인스턴스를 구분하기 위해 PK를 가지는데 이를 @id로 정의한다.
  • Spring boot를 설정 시 spring.jp.hibernate.ddl-auto설정이 create 또는 - update로 되어있는 경우 EntityManager가 자동으로 DDL를 수행해 생성해준다.
  • @Table의 name 속성을 이용해 데이터베이스 상의 실제 테이블 명칭을 지정하지 않는다면 Entity 클래스 이름 그대로 CamelCase를 유지하여 테이블이 생성된다.

@Table

-Entity와 매핑할 테이블을 지정한다. @Table은 생략이 가능한데 생략한다면 클래스의 이름을 테이블의 이름으로 자동 인식한다.

@Id

엔티티빈의 기본키를 의미한다. 어노테이션은 하나의 인티티에는 반드시 하나가 존재한다.

@GeneratedValue

데이터베이스에 의해 자동으로 생성된 값이다. 즉 프로그램 상에서 조작된 데이터가 아닌 실제 데이터베이스에 데이터가 영속될때 생성되는 값이다. 생성 전략이 존재한다.

  • Identity: 기본 키 생성을 데이터베이스가 함
  • Sequence: 데이터베이스 시퀸스를 사용하여 기본 키 할당
  • Table: 키 생성 테이블을 생성함

@Column

필드와 테이블의 컬럼을 매핑시켜준다. 어노테이션은 생략이 가능하며 생략 시 필드의 이름이 테이블의 컬럼으로 자동으로 매핑된다.

@Temperal

java.util.Date와 java.util.Calendar 값을 매핑할 때 사용한다.

  • TemporalType.Date : 년-월-일 의 date 타입 (2019-01-04)
  • TemporalType.Time : 시:분:초 의 time 타입 (12:11:11)
  • TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입 (2019-01-04 12:11:11)
  • 어노테이션을 사용하지 않을 경우 기본값은 timestamp 입니다. JPA 데이터베이스 방언에 의해, 데이터베이스의 타입에 따른 timestamp 또는 datetime은 자동으로 작성됩니다.

@Lob

데이터베이스 BLOB, CLOB 타입과 매핑된다. CLOB(String, char[], java.sql.CLOB)은 문자, BLOB(byte[], java.sql.BLOB)은 나머지가 매핑된다.

@Transient

저장 조회에 사용되지도 않고 그냥 단순한 값을 가지고 있을 때 사용한다.

@Access

데이터베이스에 엔티티에 값이 저장될 때 필드(AccessType.FIELD)의 값을 직접 접근해서 사용할 것인가 아니면 메서드에 직접(AccessType.PROPERTY) 접근할 것 인가를 설정하는 것 이다.

@MappedSuperClass

어노테이션을 사용하면 부모 엔티티 접근 없이 부모 클래스의 매핑정보를 사용할 수 있다.
부모의 내용을 별도로 재정의해서 사용하고 싶은 경우에는 @AttributeOverride를 사용하여 재정의 한다. 여러 개를 한번에 정의하기 위해서는 @AttributeOverrides를 사용한다.

profile
코딩하는 은행원 !

0개의 댓글