반응형

📝엔티티 매핑 관련 어노테이션
@Entity
@Table(name = "MBR")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // IDENTITY 전략
// @GeneratedValue(strategy = GenerationType.SEQUENCE) // SEQUENCE 전략
@Column(name="member_id")
private Long id;
private String name;
private int age;
private String address; // 필드만 추가해주면 끝
// @Enumerated(EnumType.ORDINAL) // enum 타입 매핑 [숫자] (금지)
@Enumerated(EnumType.STRING) // enum 타입 매핑 [문자] (사용 OK)
private CategoryEnum name;
// 날짜 타입 매핑 [아래 LocalDateTime을 쓰면 알아서 YYYYMMDDHHMMSS 설정]
@Temporal(TemporalType.DATE)
private Date date;
private LocalDateTime createDate
@Lob // BLOB, CLOB 매핑
private String description;
@Transient
private int temp;
}
- @Entity
- JPA에서 영속성 컨텍스트가 관리할 테이블이라는 의미이다.
- 기본생성자 필수 (JPA에서 내부적으로 리플렉션 등을 사용하기 때문에)
- @Table
- DB 테이블명하고 엔티티 이름이 다를 때 매핑 가능
- @Column
- DB 필드에 사용할 이름이나 제약조건 가능 (nullable, length 등...)
- @Id
- 해당 필드를 PK로 지정하겠다는 의미이다.
- @GeneratedValue
- PK AutoIncrement설정이다. IDENTITY로 설정할지 SEQUENCE로 지정할지 정할 수 있다.
MySQL AutoIncrement로 설정한 경우 INSERT하기 전까지 PK의 값을 모르기 때문에 예외적으로 persist시 바로 flush가 되어 DB에 저장되며 PK값을 가져온다. 그렇기 때문에 벌크 INSERT가 JPA로는 힘들다. (JDBC 네이티브 쿼리로 가능)
- PK AutoIncrement설정이다. IDENTITY로 설정할지 SEQUENCE로 지정할지 정할 수 있다.
- @Enumerate
- DB에서는 varchar형태로 만들어지는 Enum Type
- ORDINAL 사용 X → 순서를 DB에 저장해서 0, 1 이렇게 저장되기 때문에 맨앞에 0에 해당하는 PineApple이란 걸 추가하면 기존 0에 해당하는 Apple로 저장되어있던 데이터들이 같이 변경되지도 않기 때문에 Apple로 저장되어있는 0이 PineApple인 0이 되어버린다.
- @Temporal
- 날짜 필드라는 걸 알리는 의미이다.
- LocalDate, LocalDateTime을 쓰는 경우 Temporal이 알아서 적용된다.
- @Lob
- BLOB, CLOB타입이라는 걸 알리는 의미이다.
- @Transient
- DB 필드에 매핑시키지 않고 메모리에서만 사용
📝DDL 설정
hibernate설정으로 자동적으로 엔티티에 매핑되는 테이블을 생성하거나 할 수 있고 방언 설정으로 다양한 RDBMS에 맞는 SQL로 변환되어서 실행된다. [운영 장비에는 절대 create, create-drop, update 사용하면 안된다.]
hibernate.hbm2ddl.auto
| create | 기존테이블 삭제 후 다시 생성 (DROP + CREATE) |
| create-drop | create와 같으나 종료시점에 테이블 DROP |
| update | 변경분만 반영(운영DB에는 사용하면 안됨) |
| validate |
엔티티와 테이블이 정상 매핑되었는지만 확인 |
| none | 사용하지 않음 |
🔗 참고 및 출처
반응형
'[Java] > [JPA]' 카테고리의 다른 글
| [JPA] ORM, JPA란, 엔티티(Entitiy), 영속성 컨텍스트, 엔티티 생명 주기, 영속성 컨텍스트 특징(1차 캐시, 트랜잭션 쓰기 지연, 변경 감지(Dirty Check), 엔티티 삭제, 준영속 상태) (0) | 2025.11.26 |
|---|---|
| [JPA] 객체지향적인 개발과 SQL 중심적인 개발의 괴리 (상속, 연관관계, 그래프탐색) (0) | 2025.11.18 |