[JPA] Entity Mapping

yrok·2023년 10월 8일

JPA

목록 보기
2/2
post-thumbnail

📝 객체와 테이블 매핑 ( Object - Table )

@Entity

  • @Entity가 붙은 클래스는JPA가 관리, 엔티티라고 한다.
  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수
  • 주의
    • 기본 생성자가 필수이다. ( 파라미터가 없는 public 또는 protected 생성자 )
    • final, enum, interface, inner 클래스를 사용하면 안된다.
    • 저장할 필드에 final 사용 X

@Entity 속성

name

  • JPA에서 사용할 Entity 이름을 지정한다.
  • 기본값 : 클래스 이름을 그대로 사용한다.
  • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.

@Table

  • 엔티티와 매핑할 테이블 지정

📝 필드와 컬럼 매핑 ( Feild - Column )

요구사항
1. 회원은 일반 회원과 관리자로 구분해야 한다.
2. 회원 가입일과 수정일이 있어야 한다.
3. 회원을 설명할 수 있는 필드가 있어야 한다. 길이 제한 X


@Entity
public Class Member {
	
    @Id
    private Long id;
    
    @Column(name = "name")
    private String username;
    
    private Integer age;
    
    @Enumerated(EnumType.STRING)
    private RoleType roleType;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    
    @Temporal(TemporalType.TIMESTAMP)
    private DAte lastModifedDate;
    
    @Lob
    private String description;
}

매핑 어노테이션 정리

  • @Column : 컬럼 매핑

    • name : 필드와 매핑할 테이블의 컬럼 이름
    • insertable, updatable : 등록, 변경 가능 여부
    • nullable(DDL) : null 값의 허용 여부를 설정, false로 하면 DDL 생성 시에 not null 제약조건이 붙는다.
    • unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.
    • columnDefinition : 데이터베이스의 컬럼 정보를 직접 줄 수 있다.
    • length(DDL) : 문자 길이 제약조건, String 타입에만 적용
  • @Temporal : 날짜 타입 매핑

    • 요즘은 LocalDateTime or LocalDate 를 사용한다.
  • @Enumerated : enum 타입 매핑

  • @Lob : BLOB, CLOB 매핑

  • @Transient : 특정 필드를 컬럼에 매핑하지 않음 ( 무시 )

📝 기본 키 매핑

기본 키 매핑 방법

@Entity
public class Member {
	@Id
    @GeneratedValue(strategy = GenerationType.???)
    private Long id;
}
  • 직접 할당 : @Id 만 사용
  • 자동 생성 ( @GeneratedValue )
    • IDENTITY : DB에 위임, MySQL
      • IDENTITY 전략을 사용하면 transaction이 커밋되는 시점에 id 값이 생성된다.
      • 영속성 컨텍스트 1차 캐시는 id와 객체가 필요한데 id 값이 null 이므로 관리할 수 없다.
      • IDENTITY 한정으로 persist 순간 쿼리를 DB에 적용
    • SEQUENCE : DB 시퀀스 오브젝트 사용, Oracle
      • JPA에서 시퀀스에 먼저 쿼리를 날려 pk를 받아오고 id와 객체를 영속성 컨텍스트에 등록한다.
      • transaction이 커밋될 때 쿼리가 DB에 적용된다.
      • 성능 개선을 위해 initialVAlue, allocationSize 활용
    • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
    • AUTO : 방언에 따라 자동 지정, 기본값
profile
공부 일기장

0개의 댓글