[JPA] JPA 프로그래밍 - 기본편

윤재열·2022년 9월 20일
0

JPA

목록 보기
15/21
post-custom-banner

필드와 컬럼 매핑

@Entity

    1. 기본 생성자 필수(public or protect)
  • hibernate.hbmddl.auto, value ="create"

    • 애플리케이션 동작시 drop과 create를 동시에 해줌

@Column

    1. name : 필드와 매핑할 테이블의 컬럼 이름 (default : 객체의 필드 이름)
    1. insertable : 등록 가능 여부 (default : TRUE)
    1. updatable : 변경 가능 여부 (default : TRUE)
    1. nullable(DDL) : null 값의 허용 여부를 설정, false 로 설정하면 DDL 생성시에 not null 제약조건이 붙는다.
    1. unique(DDL) : @Table 의 uniqueConstraints와 같지만 한 컬럼에 간단하게 유니크 제약조건을 걸 때 사용한다.
    1. columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
    • ex) varchar(100) default 'EMPTY'
    1. length(DDL) : 문자 길이 제약조건 , String 타입에만 존재하낟.
    1. precision, scale(DDL) : BigDecimal 타입에서 사용한다.(BigInteger 도 사용가능)
    • percision 은 소수점을 포함한 전체 자리수를 ,scale은 소수의 자리수다.
    • 참고로 double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다.

@Enumerated

  • Default 는 @Enumerated(EnumType.ORDINAL)
  • 예를 들어 enum 타입인 RoleType 에 USER,ADMIN 2개가 있을 경우 EnumType.ORDINAL 일경우 USER : 0,ADMIN : 1 로 입력된다.
  • @Enumerated(EnumType.STRING)을 사용한다면 USER 는 USER, ADMIN 은 ADMIN 그대로 DB에 반영됩니다.

@Temporal

  • 날짜타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
  • LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)

@Lob

  • DB BLOB,CLOB 타입과 매핑
  • @Lob에는 지정할 수 있는 속성이 없습니다.
  • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나버지는 BLOB 매핑
    • CLOB : String, char[],java.sql.CLOB
    • BLOB : byte[], java.sql.BLOB

@Transient

  • 필드 매핑 X
  • DB에 저장X , 조회 X
  • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용합니다.

기본 키 매핑 어노테이션

기본 키 매핑 방법

  • 직접 할당 : @Id 만 사용
  • 자동 생성 (@GeneratedValue)
    • IDENTITY : 데이터베이스에 위임, MYSQL
    • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
      • @SequenceGenerator 필요
    • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
      • @TableGenerator 필요
    • AUTO : 방언에 따라 자동 지정, 기본값

권장하는 식별자 전략

  • 기본 키 제약 조건 :null 이 아니여야하며,unique하고 변하면 안됩니다.
  • 미래까지 이 조건을 만족하는 자연키는 찾기어려우니 대리키(대체키)를 사용합니다.
  • 예를 들어 주민등록번호도 기본 키로 적절하지 않습니다.
  • 권장 :Long형 + 대체키 + 키 생성전략 사용
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글