
@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 사용
개인적으로 공부하며 기록한 내용으로, 틀린 내용이 있는 경우 덧글을 달아주시면 감사하겠습니다. 😍