@Column
객체필드를 테이블 컬럼에 매핑한다.
▼ nullable (DDL 생성기능)
@Column (nullable = false)
private String data;
//생성된 DDL
data varchar(255) not null
▼ unique (DDL 생성기능)
@Column (unique = true)
private String username;
//생성된 DDL
alter table Tablename add Constraint UK_Xxx unique (username)
▼ columnDefinition (DDL 생성기능)
@Column (columnDefinition = "varchar(100) default 'EMPTY'")
private String data;
//생성된 DDL
data varchar(100) default 'empty'
▼precision, scale (DDL 생성기능)
@Column (precision = 10, scale = 2)
private BigDecimal cal;
//생성된 DDL
cal numeric(10,2) //h2, PostgreSQL
cal number(10,2) //오라클
cal decimal(10,2) //Mysql
@Enumerated
@Enumerated 를 사용하면 편리하게 enum 타입을 데이터베이스에 저장할 수 있다.
enum 타입의 클래스.. RoleType.java
enum RoleType {
ADMIN, USER
}
enum 이름으로 매핑하기
@Enumerated(EnumType.STRING)
private ROLETYPE roleType;
enum은 다음처럼 사용한다.
member.setRoleType(RoleType.ADMIN); //DB에 문자 ADMIN으로 저장된다
@Temporal
날짜 타입( java.util.Date, java.util.Calendar) 를 매핑할 때 사용
▼ Temporal 사용 예시
@Temporal (TemporalType.DATE)
private Date date; //날짜
@Temporal (TemporalType.TIME)
private Date time; //시간
@Temporal (TemporalType.TIMESTAMP)
private Date timestamp; //날짜와 시간
//생성된 DDL
date date,
time time,
timestamp timestamp,
@Temporal 을 생략하면 자바의 Date와 가장 유사한 timestamp로 정의됨.
@Lob
매핑하는 필드 타입이 문자면 CLOB으로 매핑하고, 나머지는 BLOB으로 매핑한다
- CLOB : String, char[], java.sql.CLOB
- BLOB : byte[], java.sql.BLOB
▼ Lob 사용 예시
@Lob
private String lobString;
@Lob
private byte[] lobByte;
//생성된 DDL
//오라클
lobString clob,
lobByte blob,
//Mysql
lobString longtext,
lobByte longblob;
@Transient
이 필드는 매핑하지 않는다. 데이터베이스에 저장하지않고 조회하지도 않는다.
객체에 임시로 어떤 값을 보관하고 싶을 때 사용
@Transient
private Integer temp;
@Access
jpa가 엔티티 데이터에 접근하는 방식을 지정
- 필드접근
- 프로퍼티 접근
▼ 필드접근코드
@Entity
@Access(AccessType.FIELD)
public class Member {
@Id
private String id;
.....
}
@Access 를 설정하지 않으면 @Id 위치를 기준으로 접근방식이 설정된다
@Id가 필드에 있으므로 필드접근방식임.. @Access(AccessType.FIELD) 생략가능
▼ 프로퍼티 접근코드
@Entity
@Access(AccessType.PROPERTY)
public class Member {
private String id;
.....
@Id
public String getId(){
return id;
}
......
}
@Access 를 설정하지 않으면 @Id 위치를 기준으로 접근방식이 설정된다
@Id가 프로퍼티에 있으므로 프로퍼티 접근방식임.. @Access(AccessType.PROPERTY) 생략가능
▼ 필드 / 프로퍼티 접근 함께사용
@Entity
public class Member {
@Id
private String id;
.....
public String getId(){
return id;
}
@Access(AccessType.PROPERTY)
public String getFullName(){
return firstName + lasName;
}
......
}
@Id가 필드에 있으므로 필드접근방식임..
getFullName()만 프로퍼티 접근방식을 사용
'JPA' 카테고리의 다른 글
JPA시작(9)_연관관계 매핑(N:1, 단방향) / 연관관계 사용(등록, 수정, 삭제, 조회) (0) | 2021.06.08 |
---|---|
JPA시작(8)_객체 연관관계 / 테이블 연관관계 (0) | 2021.06.08 |
JPA시작(6)_기본키 매핑 (직접할당, 자동생성) (0) | 2021.06.07 |
JPA시작(5)_데이터베이스 스키마 자동생성 (0) | 2021.06.07 |
JPA시작(4)_다양한 매핑 사용 @Enumerated, @Temporal, @Lob, @Column, @UniqueConstraint (0) | 2021.06.07 |