Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

666 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. JPA 필드 와 컬럼 매핑 레퍼런스
  2. 2. JPA 필드 와 컬럼 매핑 레퍼런스 •@Column : 컬럼을 매핑한다. •@Enumerated : enum 타입을 매핑한다. •@Temporal : 날짜 타입 매핑한다. •@Lob : BLOB, CLOB 타입을 매핑한다. •@Transient : 해당 필드를 데이터 베이스에 매핑 시키지 않는다. •@Access : JPA가 엔티티 접근하는 방식을 지정한다. @Column name : 필드와 매핑할 테이블의 컬럼 이름 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타입에는 적용 되지 않는다.
  3. 3. @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을 쓰는 것을 권장한다.
  4. 4. @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.CLOB BLOB : byte[], java.sql.BLOB @Transient 위와 같이 선언된 필드는 데이터베이스에 저장, 조회도 하지않는다. 임시로 값을 보관할 때 사용한다.
  5. 5. @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의 결과가 저장된다.

×