필드와 컬럼 맵핑

2024. 10. 3. 15:01·Spring
728x90

@Column

객체 필드를 테이블 컬럼에 맵핑한다.

속성

- name : 필드와 매핑할 테이블의 컬럼 이름

- insertable : 엔티티 저장 시 이 필드도 같이 저장한다. false로 지정하면 DB에 저장하지 않는다. (false는 읽기 전용)

- updateable : 엔티티 수정 시 이 필드도 같이 수정한다. false로 지정하면 DB에 수정하지 않는다. (false는 읽기 전용)

- table : 하나의 엔티티를 두 개 이상의 테이블에 맵핑할 때 사용한다. 지정한 필드를 다른 테이블에 매핑할 수 있다. (거의 사용하지 않는                   다.)

- nullable(DDL) : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다.

- unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.

- columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다.

- length(DDL) : 문자길이 제약조건, String 타입에만 사용한다.

- precision, scale(DDL) : BigDecimal, BigInteger 타입에서 사용한다. precision은 소수점을 포함한 전체 자릿수, scale은 소수의 자릿수이다. float과 double에는 적용되지 않는다.

@Enumerated

자바의 enum 타입을 맵핑한다.

속성

value :

    EnumType.ORDINAL : enum 순서를 데이터베이스에 저장

                                          장점 : DB에 저장되는 데이터의 크기가 작다. 

                                          단점 : 이미 저장된 enum의 순서를 변경할 수 없다.

    EnumType.STRING : enum 이름을 데이터베이스에 저장

                                        장점 : 저장된 enum의 순서가 바뀌거나 enum이 추가되어도 안전하다.

                                        단점 : ORDINAL보다 DB에 저장되는 데이터의 크기가 크다.

위와 같은 장, 단점으로 인해서 STRING이 권장된다.

@Temporal

날짜 타입을 맵핑한다.

속성

value : 

     TemporalType.DATE : 날짜, 데이터베이스 date 타입과 매핑 (2024-10-01)

     TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑 (14:52:33)

     TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑 (2024-10-01 14:52:33)

자바에는 년월일 시분초가 있다. DB에는 date(날짜), time(시간), timestamp(날짜와 시간)로 세 가지 타입이 존재한다.

@Lob

BLOB, CLOB 타입을 맵핑한다.

문자면 CLOB, 나머지는 BLOB으로 매핑

@Transient

특정 필드를 데이터베이스에 맵핑하지 않는다.

조회 또한 하지 않는다. 객체에 어떤 값을 임시로 보관하고 싶을 때 사용한다.

@Access

JPA가 엔티티 데이터에 접근하는 방식을 지정한다.

- 필드 접근 : AccessType.FIELD로 지정한다. 필드에 직접 접근한다. 필드 접근 권한이 private이어도 접근할 수 있다.

- 프로퍼티 접근 : AccessType.PROPERTY로 지정한다. 접근자를 사용한다.

 

@Access를 설정하지 않으면 @Id의 위치를 기준으로 접근 방식을 설정

 

@Entity
@Access(AccessType.FIELD)
public class Member {
    @Id
    private String id;
    
    private String data1;
    private String data2;
}

이 경우는 @Id가 필드에 있음으로 따로 @Access를 지정 안해도 된다.

@Entity
@Access(AccessType.PROPERTY)
public class Member {

    private String id;
    
    private String data1;
    private String data2;
    
    @Id
    public String getId() {
    	return id;
    }
    
    @Column
    public String getData1() {
    	return data1;
    }
    
    public String getData2() {
    	return data2;
    }
}

@Id가 프로퍼티에 있어서 @Access(AccessType.PROPERTY)로 설정한 것과 같다. 그래서 @Access는 생략해도 된다.

 

필드 접근 방식과 프로퍼티 접근 방식을 함께 사용할 수도 있다.

@Entity
public class Member {

    @Id
    private String id;
    
    @Transient
    private String firstName;
    
    @Transient
    private String lastName;
    
    @Access(AccessType.PROPERTY)
    public String getFullName() {
    	return firstName + lastName;
    }
}

@Id가 필드에 있으니 기본은 필드 접근 방식을 사용한다. getFullName()만 프로퍼티 접근 방식을 사용한다. 회원 엔티티를 저장하면 회원 테이블의 FULLNAME 컬럼에 firstName + lastName의 결과가 저장된다.

 

728x90

'Spring' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2024.10.05
연관관계 매핑  (0) 2024.10.03
엔티티 매핑  (0) 2024.09.29
영속성 관리  (1) 2024.09.22
JPA Application 개발  (0) 2024.09.21
'Spring' 카테고리의 다른 글
  • 다양한 연관관계 매핑
  • 연관관계 매핑
  • 엔티티 매핑
  • 영속성 관리
Bello's
Bello's
개발하는 벨로
  • Bello's
    벨로의 개발일지
    Bello's
  • 전체
    오늘
    어제
    • 분류 전체보기 (199) N
      • 노예 일지 (7)
        • 스타트업 노예일지 (3)
      • CS 이론 (81)
        • 학과 수업 (4)
        • 알고리즘 (64)
        • 시스템 프로그래밍 (3)
        • 데이터 통신 (1)
        • 운영체제 (2)
        • 데이터베이스 (1)
      • project (3)
      • 나는 감자다. (4)
      • Spring (27)
      • 모각코 (45)
        • 절개와지조(모각코) (7)
        • 어쩌다보니 박준태가 조장이조 (11)
        • 어쩌다보니 박준태가 또 조장이조 (12)
      • LikeLion🦁 (20)
      • 캘리포니아 감자 (4)
      • OpenSource Contribute (1)
      • 우아한테크벨로 (1) N
        • 프리코스 회고록 (6) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    DFS
    티스토리챌린지
    Spring
    JPA
    자바
    모각코
    프리코스
    BFS
    회고록
    백준
    어렵다
    절개와지조
    누적합
    감자
    그래프 순회
    나는 감자
    타임리프
    뛰슈
    8기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Bello's
필드와 컬럼 맵핑
상단으로

티스토리툴바