[JPA 긴급 학습 (3)] 필드와 칼럼 매핑
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Double latitude;
@Column(nullable = false)
private Double longitude;
클래스 내부에서 이런 식
1. @Column
@Column은 객체 필드를 테이블 칼럼에 매핑한다.
이제 테이블 전체가 아니라 진짜 어트리뷰트에 매핑하는.
어노테이션 뒤에 추가로 지정할 수 있는 속성은
(1) name
(2) nullable
(3) unique
(4) columnDefinition
(5) length
(6) precision, scale
(2)~(6)은 DDL에서 제약조건의 의미.
(2) 디폴트는 null 허용.
not null로 지정할 경우에는
@Column(nullable = false)
이렇게.
(3) unique는
uniqueConstraints와 같지만 한 칼럼에 간단히 유니크 제약 조건을 걸 때 사용.
만약 2개 이상의 칼럼이 unique키가 되는 경우라면 클레스 레벨에서 @Table.uniqueConstraints를 사용.
(4) columnDefinition은
칼럼 도메인을 직접 지정해주는거.
@Column(columnDefinition = "varchar(100) default 'EMPTY'")
private String data;
라고 하면
이제 DDL 쿼리문은 data varchar(100) default 'EMPTY'가 됨.
(5) length는
문자 길이 제약조건. 디폴트는 255
(★★★★★책에는 이렇게만 써있는데, 이거뭐 그냥 255바이트인지, 2byte가 255개라는건지 확인필요★★★★★)
String 타입에서만 사용
@column(length=400)
private String data;
하면 DDL은 data varchar(400)이 된다.
2. @Enumerated
이건 자바에서 enum타입을 매핑할 때 사용한다.
지정할 수 있는 속성에 ORDINAL, STRING이 있다.
여기서는 일단 STRING
@Enumerated(EnumType.STRING)
private RoleType roleType;
해놓고
member.setRoleType(RoleType.ADMIN)
하면 DB에 문자 ADMIN이 저장된다.
즉, 정리하면 EnumType.STRING은 enum이름 그대로 문자가 저장된다. 대신 ORDINAL에 비해서 DB에 저장되는 데이터 크기가 크다.
3. @Temporal
날짜 타입을 매핑할 때 사용한다.
@Temporal(TemporalType.DATE)
private Date data;
아니면
@Temporal(TemporalType.TIME)
private Date time;
아니면
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
그러면 실제로 DDL은
date date,
time time,
timestamp timestamp가 된다.
자바의 Date타입에는 년월일 시분초가 있지만, DB에는 date(날짜), time(시간), timestamp(날짜와 시간)의 3가지 타입이 별도로 존재한다.
4. @Transient
이건 필드를 매핑하지 않을 때 사용한다.
그래서 DB에 저장하지도 않고, 조회하지도 않는다.
객체에 임시로 어떤 값을 보관하고 싶을 때 사용한다.
@Transient
private Integer temp;
5. @Access
이건 JPA가 엔티티 데이터에 접근하는 방식을 지정한다.
클래스레벨에 붙는다.
@Entity
@Access(AccessType.FIELD)
public class Member {
@Id
private String id;
...
(1) 필드 접근
AccessType.FIELD 이렇게 지정.
필드에 직접 접근하는 방식.
필드가 private이어도 접근할 수 있다.
(2) 프로퍼티 접근
AccessType.PROPERTY 이렇게 지정.
접근자(게터)를 사용하는 방식.
@Access를 사용하지 않으면 @Id의 위치를 기준으로 접근방식이 결정됨
@Id가 필드에 붙어있으면 AccessType.FIELD가 되고, 게터에 붙어있으면 AccessType.PROPERTY가 된다.
Author And Source
이 문제에 관하여([JPA 긴급 학습 (3)] 필드와 칼럼 매핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@red_gunny/JPA-긴급-학습-3-필드와-칼럼-매핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)