엔티티 맵핑(2) - slahsk/study GitHub Wiki

엔티티 맵핑(2)

@Column

필드 테이블 컬럼에 맵핑

생략하면 필드 이름으로 맵핑된다.

  int data1; // not null

  Integer data2;

기본타입, 래퍼 클레스 는 DDL자동생성시에 차이가 있다. not null, nll 차이

@Enumerated

자바의 enum 타입을 맵핑할 때 사용

  enum RoleType{
    ADMIN, USER
  }
  @Enumerated(EnumType.STRING) //문자로 저장 ADMIN, USER
  private RoleType roleType;

  @Enumerated(EnumType.ORDINAL)//순서대로 저장 0, 1
                              //주의할점은 수정하여 enum 중간에
                              //하나 추가 되는경요 ADMIN, NEW ,USER USER 는 2개 된다.
  private RoleType roleType;

@Temporal

날자 타입(java.util.Date, java.util.Calender) 맵핑할 떄 사용

  @Temporal(TemporalTyle.DATE)
  private Date date;//날짜

  @Temporal(TemporalTyle.TIME)
  private Date time;//시간

  @Temporal(TemporalTyle.TIMESTAMP)
  private Date timestamp;//날짜 시간

생략을 하면 timestamp로 정의 된다.

@Lob

필드 타입이 문자면 CLOB 매핑하고 나머지는 BLOB로 맵핑한다.

@Transient

이 필드는 맵핑하지 않는다.

@Access

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

  @Entiy
  @Access(AccessType.FIELD)
  public class Member{

    @Id
    private String id;

    private String data1;
    private String data2;
  }

@Access 설정하지 않으면 @id 기준으로 접근 방식이 설정된다.

@Entiy
@Access(AccessType.PROPERTY) //생략 가능 @id 기준으로 하기때문
public class Member{


  private String id;

  private String data1;
  private String data2;

  @Id
  public  String getId(){
    return id;
  }

  @Column
  public String getData1(){
    return data1;
  }
}
@Entiy
public class Member{

  @Id
  private String id;

  @Transient
  private String firstName;

  @Transient
  private String lastName;

  @Access(AccessType.PROPERTY)
  public String getFullName(){
    return firstName + lastName
  }
}

둘다 사용 가능하다.

DB 저장시 FULLNAME 컬럼에 firstName + lastName의 값이 저장된다.