Jpa 필드 와 컬럼 매핑 레퍼런스

5
JPA 필필 필 필필 필필 필필필필

Transcript of Jpa 필드 와 컬럼 매핑 레퍼런스

Page 1: Jpa 필드 와 컬럼 매핑 레퍼런스

JPA 필드 와 컬럼 매핑 레퍼런스

Page 2: Jpa 필드 와 컬럼 매핑 레퍼런스

JPA 필드 와 컬럼 매핑 레퍼런스•@Column : 컬럼을 매핑한다 .•@Enumerated : enum 타입을 매핑한다 .•@Temporal : 날짜 타입 매핑한다 .•@Lob : BLOB, CLOB 타입을 매핑한다 .•@Transient : 해당 필드를 데이터 베이스에 매핑 시키지 않는다 .•@Access : JPA 가 엔티티 접근하는 방식을 지정한다 .

@Columnname : 필드와 매핑할 테이블의 컬럼 이름insertable : 엔티티 저장시 이 필드도 같이 저장한다 . false 로 설정하면 데이터베이스에 저장하지 않는다 . 읽기 전용일때 사용한다 .updatable : 위와 동일한 하지만 수정일때 해당 된다 .nullable(DDL) : null 값 허용 여부를 설정한다 . false 일 경우 DDL 생성시 not null 제약조건이 된다 .unique(DDL) : 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다 . 만약 두개 이상 걸고 싶다면 클래스 레벨에서 @Table.uniqueConstraints 를 사용해야 한다 .columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다 .length : 문자 길이 제약 조건이다 . String 만 해당된다 .precision, scale(DDL) : BigDecimal 타입에서 사용한다 .(BigInteger 가능 ) precision 은 소수점을 포함한 전체 자리수 이고 , scale 은 소수점 자릿수이다 . double 랑 float 타입에는 적용 되지 않는다 .

Page 3: Jpa 필드 와 컬럼 매핑 레퍼런스

@Enumerated

value : EnumType.ORDINAL 값은 enum 순서를 데이터 베이스에 저장한다 . EnumType.STRING 값은 enum 이름을 저장한다 .

Ex)

enum RoleType { ADMIN, USER

}

@Enumerated(EnumType.STRING) private RoleType roleType; m.setRoleType(RoleType.ADMIN) //ADMIN 으로 저장된다 .

보통은 STRING 을 쓰는 것을 권장한다 .

Page 4: Jpa 필드 와 컬럼 매핑 레퍼런스

@Temporal

value : TemporalType.DATE 는 날짜 , 데이터베이스 date 타입과 매핑 (2016-04-19), TemporalType.TIME 시간 , 데이터베이스 time 타입과 매핑 (21:22:11) TemporalType.TIMESTAMP : 날짜와 시간 , 데이터베이스 timestamp 타입과 매핑 (2016-04-19 21:22:11)

@Lob

속성이 없다 . 대신 매핑하는 필드 타입이 문자라면 CLOB 으로 매핑하고 나머지는 다 BLOB 으로 매핑하면 된다 .CLOB : String, char[], java.sql.CLOBBLOB : byte[], java.sql.BLOB

@Transient

위와 같이 선언된 필드는 데이터베이스에 저장 , 조회도 하지않는다 . 임시로 값을 보관할 때 사용한다 .

Page 5: Jpa 필드 와 컬럼 매핑 레퍼런스

@Access

필드 접근 : AccessType.FIELD 로 지정한다 . 필드에 직접 접근한다 . private 권한이여도 접근할 수 있다 .프로퍼티 접근 : AccessType.PROPERTY 로 지정한다 . 접근자 getter 로 접근한다 .

@Entity public class Member {

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

}

@Id 가 필드에 있으면 기본적으로 필드접근 방식을 사용한다 .만약 프로퍼티에 있으면 기본적으로 프로퍼티접근 방식을 사용한다 .위의 코드는 @Id 가 필드에 있으므로 필드 접근 방식을 사용하고 getFullName 만 프로퍼티를 사용한다 . 그러면 회원이라는 엔티티의 FULLNAME 컬럼이 생성되고 firstName + lastName 의 결과가 저장된다 .