반응형
@Column 컬럼을 매핑
- name : 필드와 매핑할 테이블의 컬럼 이름
@Column(name = "name")
private String username;
- insertable / updateable : 등록, 변경 가능 여부 / 기본값 : TRUE
//DB에 insert문이 처리될 때 할건지 말건지 / update문 처리될때 반영할건지 말건지
@Column(insertable=true, updatable=true)
private String username;
- nullable : null 값의 허용 여부 설정 (false로 설정하면 DDL 생성시 not null 처리) / 기본값 : TRUE
// false일 경우, not null 제약조건이 걸린다
@Column(nullable=false)
private String username;
- unique : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.
//unique를 걸어주는 작업이지만 잘 사용하지않음.. 이유는 unique가 생성되면서 unique명이 랜덤으로 지정되어 운영에서 사용X.. 그래서 위 @Table 에서 지정해주는것을 선호
@Column(unique=true)
private String username;
- columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
//DB컬럼 정보를 직접 넣어주는 것
@Column(columnDefinition="varchar(100) default 'EMPTY'")
private String username;
- length : 문자 길이 제약조건, String 타입에만 사용한다.
- percision / scale : BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다) percision은 소수점을 포함한 전체 자릿수, scale은 소수의 자릿수. double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다.
//숫자일 경우.. precision : 소수점을 포함한 전체 자릿수, scale : 소수의 자릿수
@Column(precision=19, scale=2)
private Integer age;
@Enumerated enum 타입 매핑
EnumType.ORDINAL : enum 순서를 DB에 저장 (Integer Type으로 저장) :: 기본값
EnumType.STRING : enum 이름을 DB에 저장 (String Type으로 저장)
enum class를 이렇게 설정해두고
RoleType.java
public enum RoleType {
USER, ADMIN
}
EnumType.ORDINAL Type으로 실행했을 경우
Member member = new Member();
member.setId(200L);
member.setUsername("A");
member.setRoleType(RoleType.USER);
ROLETYPE은 USER이 순서인 0이 된다.
Member member = new Member();
member.setId(201L);
member.setUsername("B");
member.setRoleType(RoleType.ADMIN);
ADMIN을 넣게되면 ADMIN 순서인 1이 DB에 저장된다.
* 여기서 ORDINAL을 사용하면 안되는 이유가 나온다..
enum에 데이터를 추가할 경우, 순서가 변경된다면? 기존에 DB에 넣어진 데이터들이 망가지게된다..
public enum RoleType {
TEST, USER, ADMIN
}
enum에 TEST를 추가한 후 TEST의 값을 넣었을 경우
Member member = new Member();
member.setId(202L);
member.setUsername("C");
member.setRoleType(RoleType.TEST);
방금 TEST로 넣은 3번째 데이터도 ROLETYPE이 0이 되었다..
이러한 문제 때문에 기본값인 EnumType.ORDINAL은 사용하면 안된다.
그래서 사용하는 것이 EnumType.STRING
@Enumerated(EnumType.STRING) //객체에서 enum Type을 사용하고싶을때
private RoleType roleType;
Member member = new Member();
member.setId(200L);
member.setUsername("A");
member.setRoleType(RoleType.USER);
저장된 데이터를 보면 String 형식으로 들어간 것을 볼 수 있다.
데이터를 아끼려다가 큰장애를 내는 것 보다 EnumType.STRING을 꼭 사용하는 것을 권장한다.
인강으로 공부하면서 작성하는 글로 잘못된 정보가 있을 수도 있습니다! 잘못된 정보가 있을 시 댓글달아주세요 : 0
반응형
'JPA' 카테고리의 다른 글
[JPA] 기본 키 매핑 어노테이션 @Id / @GeneratedValue [IDENTITY, SEQUENCE, TABLE, AUTO] (0) | 2021.07.06 |
---|---|
[JPA] @Temporal / @Lob / @Transient 속성 (0) | 2021.07.05 |
[JPA] @Entity / @Table 매핑 어노테이션 정리 (0) | 2021.07.01 |
[JPA] 플러시 flush란? (0) | 2021.06.30 |
[JPA] 영속성 컨텍스트 PersistenceContext (4) | 2021.06.29 |