@Column
은 객체 필드를 DB 테이블 컬럼
에 매핑한다.
속성명 | 기능 | Default |
---|---|---|
name | 필드와 매핑할 테이블의 컬럼명 | 객체의 필드명 |
nullable (DDL) |
한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.생성되는 제약조건 이름이 알아보기 힘든 문자로 생성되므로 🔗@Table의 uniqueConstraints 속성을 이용해 name까지 같이 지정하는 방식을 더 많이 쓴다. | |
columnDefinition (DDL) |
DB 컬럼 정보를 직접 매핑 | 필드의 자바 타입과 방언 정보를 사용해 적절한 컬럼타입을 생성한다. | 필드의 자바 타입과 방언 정보를 사용해 적절한 컬럼 타입 생성 |
length (DDL) |
문자 길이 제약조건 String 타입에만 사용 | 255 |
precision,scale (DDL) |
BigDecimal/BigInteger 타입에서 사용 precision은 소수점을 포함한 전체 자리수 scale은 소수점 자리수 |
precision=19, scale=2 |
@Column(nullable = false)
private <String name;
// 생성 DDL
// name varchar(255) not null
@Column(unique = true)
private String username;
// 생성된 DDL
// alter table TableName
// add constraint UK_xxx unique (username)
@Column(columnDefinition = "varchar(100) default 'EMPTY'")
private String desc;
// 생성된 DDL
// desc varchar(100) default 'EMPTY'
@Column(length = 4000)
private String contents;
// 생성된 DDL
// data varchar(400)
@Column(precision =10, scale = 2)
private BigDecimal cal;
// 생성된 DDL
// cal numeric(10,2) H2, PostgreSQL
// cal number(10,2) Oracle
// cal decimal(10,2) MySQL
✍ @Column
을 생략하는 경우, 객체 타입
이면 (nullable = true)
기본형(primitive)이면 (nullable = false)
가 적용된다.
자바의 Enum
을 매핑할 때 사용
✍ EnumType.ORIGINAL
: enum 순서를 저장(1,2,3 ...
)
✍ EnumType.STRING
: enum 이름을 저장(지정된 enum type - ADMIN..
)
Default. EnumType.ORIGINAL
날짜 타입을 매핑할 때 사용.(java.util.Date
, java.util.Canlendar
, LocalDate
, LocalDateTime
)
✍ TemporalType.DATE
: 데이터베이스 date 타입
✍ TemporalType.TIME
: 데이터베이스 time 타입
✍ TemporalType.TIMESTAMP
: 데이터베이스 timestamp 타입
최신 Hibernate에선 생략해도 된다.(Java8 이상)
데이터베이스 BLOB
, CLOB
타입과 매핑한다.
@LOB
은 지정할 수 있는 속성이 없다.
매핑하는 필드 타입이 문자면 CLOB 으로 매핑하고, 나머지는 BLOB 으로 매핑한다.
@Transient
를 붙이면 해당 필드는 매핑하지 않는다.
DB
저장하지 않고, 조회하지도 않기 때문에 객체에 임시로 값을 보관하고 싶을 때 사용한다.
JPA가 엔티티 데이터에 접근하는 방식을 지정
✍ AccessType.FIELD
: 필드에 직접 접근, private
도 접근 가능
✍ AccessType.PROPERTY
: 프로퍼티 접근, 접근자 getter
사용
개인적으로 공부하며 기록한 내용으로, 틀린 내용이 있는 경우 덧글을 달아주시면 감사하겠습니다. 😍