JPA

JPA 엔티티 매핑

으엉어엉 2024. 8. 15. 18:53
728x90
  • 객체와 테이블 매핑: @Entity, @Table  
  • 필드와 컬럼 매핑: @Column
  • 기본 키 매핑: @Id
  • 연관관계 매핑: @ManyToOne ,@JoinColumn

1. @Entity

JPA가 관리를 한다. JPA를 사용하여 테이블과 매핑할 클래스는 필수로 적어주어야한다.

기본 생성자가 필수 (파라미터가 없는 것) 이고 final 클래스, enum, interface, innter 클래스 사용 X

저장할 필드에 final 사용 X

2. @Table

 

3. @ Column

 

 

insertable,updatable : insert , update 할 것이냐 말 것이냐. 기본값은 TRUE , FALSE로 하면 변경되지 않는다.

nullable (중요) : false로 하면 not null 제약조건이 붙는다.

 

 

 

 

 

 

 

 


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

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

 

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

  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

직접 스크립트를 만드는 것을 권장한다.

 

 

 

 

 


 

기본키 매핑

 

 

 

@Entity
@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ",
        initialValue = 1, allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;

 

 

@Entity
@TableGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        table = "MY_SEQUENCES",
        pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator = "MEMBER_SEQ_GENERATOR")
    private Long id;

 

하지만 실제로 쓰긴 어렵다. 실제로 DB들의 관례들이 있기 때문이다.

 

기본 키 제약 조건: null 아님, 유일, 변하면 안된다.

미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.

권장: Long형 + 대체키 + 키 생성전략 사용

728x90

'JPA' 카테고리의 다른 글

JPA 연관관계 매핑  (0) 2024.08.22
JPA 연관관계  (0) 2024.08.21
JPA 플러시  (0) 2024.08.15
JPA 영속성  (0) 2024.08.15
JPA 개발  (0) 2024.08.15