반응형
엔티티 매핑에서 사용될 컬럼의 필드 유형을 설정하는 매핑 어노테이션을 정리해보자.
@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 |
반응형
'web > JPA' 카테고리의 다른 글
연관관계 매핑 (다대일 - 양방향) (0) | 2018.10.26 |
---|---|
연관관계 매핑 - 다대일 매핑 (단반향) (0) | 2018.10.23 |
JPA 매핑 어노테이션 - DDL (0) | 2018.10.12 |
JPA 영속성 컨테이너에서 엔티티 사용하기 (0) | 2018.10.11 |
JPA persistence 설정 및 Entity manager 설명 (0) | 2018.10.10 |