web/JPA

JPA 매핑 어노테이션 - DDL 2

반응형

엔티티 매핑에서 사용될 컬럼의 필드 유형을 설정하는 매핑 어노테이션을 정리해보자.

@Column
테이블에서 사용 되는 컬럼이라는 필드를 지정해줄때 사용하며 name, nullable(기본이 true) 등의 설정을 해줄 수 있다. 

1
2
@Column(name = "NAME", length = 10, nullable = true)
private String userName;
cs


@Enumerated
자바의 enum 타입을 매핑할 때 사용한다. 속성으로 EnumType.ORDINAL과 EnumType.STRING이 존재하는데 이름 그대로 ORDINAL은 순서를 STRING은 Enum의 이름을 저장한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Member {
 
  @Id
  @GeneratedValue
  @Column(name = "ID")
  private String id;
 
  @Column(name = "NAME"length = 10, nullable = true)
  private String userName;
 
  // 매핑 정보가 없는 필드
  private int age;
 
  @Enumerated(EnumType.STRING)
  Gender gender;
 
}
 
enum Gender {
  Men, Women;
 
  private Gender() {
 
  }
}
 
// 위와 같이 설정하면 데이터베이스에 Men으로 들어간다.
member.setGender(Gender.Men);
cs


@Temporal
java.util.Date와 java.util.Calendar 값을 매핑 할 때 사용한다.

1
2
3
4
5
6
7
8
9
10
11
// 2018-04-02 형태 (데이터베이스 DATE와 매핑)
@Temporal(TemporalType.DATE)
private Date birthDate;
 
// 12:11:11 (데이터베이스 TIME과 매핑)
@Temporal(TemporalType.TIME)
private Date birthTime;
 
// 2013-10-21 12:11:11 (데이터베이스 TIME과 매핑)
@Temporal(TemporalType.TIMESTAMP)
private Date birthTimeStamp;
cs


@LOB
데이터베이스 BLOB, CLOB 타입과 매핑 된다. CLOB(String, char[], java.sql.CLOB)은 문자, BLOB(byte[], java.sql.BLOB)은 나머지가 매핑된다.

@Transient
저장 조회에 사용되지도 않고 그냥 단순 값을 가지고 있고 싶을때 사용.

1
2
@Transient
private String tempStr;
cs


@Access
데이터베이스에 엔티티에 값이 저장될 때 필드(AccessType.FIELD)의 값을 직접 접근해서 사용할 것인가 아니면 메서드에 직접(AccessType.PROPERTY) 접근할 것 인가를 설정하는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Access(AccessType.FIELD)
public class Member {
 
  @Id
  @GeneratedValue
  @Column(name = "ID")
  private String id;
 
  @Column(name = "NAME"length = 10, nullable = true)
  private String userName;
 
  // 매핑 정보가 없는 필드
  private int age;
 
  @Enumerated(EnumType.STRING)
  Gender gender;
 
  // 2018-04-02 형태 (데이터베이스 DATE와 매핑)
  @Temporal(TemporalType.DATE)
  private Date birthDate;
 
  // 12:11:11 (데이터베이스 TIME과 매핑)
  @Temporal(TemporalType.TIME)
  private Date birthTime;
 
  // 2013-10-21 12:11:11 (데이터베이스 TIME과 매핑)
  @Temporal(TemporalType.TIMESTAMP)
  private Date birthTimeStamp;
 
  @Transient
  private String tempStr;
 
}
cs


- @Access 필드를 생략하고 @Id 필드를 사용하면 AccessType.FIELD로 설정된 것과 같다.
- 나머지 필드는 @Id를 사용하여 AccessType.FIELD로 사용하고 특정 값만 AccessType.PROPERTY로 설정할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@Access(AccessType.FIELD)
public class Member {
 
  @Id
  @GeneratedValue
  @Column(name = "ID")
  private String id;
 
  @Column(name = "NAME"length = 10, nullable = true)
  private String userName;
 
  // 매핑 정보가 없는 필드
  private int age;
 
  @Enumerated(EnumType.STRING)
  Gender gender;
 
  // 2018-04-02 형태 (데이터베이스 DATE와 매핑)
  @Temporal(TemporalType.DATE)
  private Date birthDate;
 
  // 12:11:11 (데이터베이스 TIME과 매핑)
  @Temporal(TemporalType.TIME)
  private Date birthTime;
 
  // 2013-10-21 12:11:11 (데이터베이스 TIME과 매핑)
  @Temporal(TemporalType.TIMESTAMP)
  private Date birthTimeStamp;
 
  @Transient
  private String tempStr;
 
  @Access(AccessType.PROPERTY)
  public String getFullName() {
    return "test" + this.userName;
  }
 
}
cs


반응형