jpa 관련 어노테이션
- @Column : 컬럼을 매핑한다.
- @Enumerated : enum 타입을 매핑한다.
- @Temporal : 날짜 타입 매핑한다.
- @Lob : BLOB, CLOB 타입을 매핑한다.
- @Transient : 해당 필드를 데이터 베이스에 매핑 시키지 않는다.
- @Access : JPA가 엔티티 접근하는 방식을 지정한다.
@Column
name : 필드와 매핑할 테이블의 컬럼 이름
insertable : 엔티티 저장시 이 필드도 같이 저장한다. false로 설정하면 데이터베이스에 저장하지 않는다. 읽기 전용일때 사용한다.
updatable : 위와 동일한 하지만 수정일때 해당 된다.
@Column(insertable=false, updatable=false)
private String defaultField;
위와같이 하면 update 나 insert 가 안된다. update 만 안할 경우 updatable 만 false 로 하면 된다.
table : 지정한 필드를 다른 테이블에 맵핑할 수 있도록 합니다.
nullable(DDL) : null 값 허용 여부를 설정한다. false일 경우 DDL생성시 not null 제약조건이 된다.
unique(DDL) : 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다. 만약 두개 이상 걸고 싶다면 클래스 레벨에서 @Table.uniqueConstraints를 사용해야 한다.
columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
length : 문자 길이 제약 조건이다. String만 해당된다.
precision, scale(DDL) : BigDecimal 타입에서 사용한다.(BigInteger 가능) precision은 소수점을 포함한 전체 자리수이고, scale은 소수점 자릿수이다. double랑 float타입에는 적용 되지 않는다.
@Enumerated
value : EnumType.ORDINAL값은 enum 순서를 데이터 베이스에 저장한다. EnumType.STRING값은 enum 이름을 저장한다.
enum RoleType {
ADMIN, USER
}
@Enumerated(EnumType.STRING)
private RoleType roleType;
m.setRoleType(RoleType.ADMIN) //ADMIN으로 저장된다.
보통은 STRING을 쓰는것을 권장한다.
@Temporal
날짜 타입(java.util.Date, java.util.Calendar)을 맵핑할 때 사용한다.
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
위와 같이 선언된 필드는 데이터베이스에 저장, 조회도 하지않는다. 임시로 값을 보관할 때 사용한다.
@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의 결과가 저장된다.
'Spring > JPA' 카테고리의 다른 글
스프링부트 jpa 시작해보기 - jpa 정의 및 jdbc 설명 (0) | 2024.05.30 |
---|---|
Spring JPA Pageable 처리 - sort 및 Page 처리(totalElements) (0) | 2024.01.09 |
[Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법 (0) | 2021.04.02 |
[Spring JPA] jpa 사용하기 - JpaRepository (0) | 2021.04.02 |
[spring JPA] 스프링 jpa converter (empty string to null) (0) | 2020.10.02 |