자바/JPA 프로그래밍

4. 엔티티 메핑

hooooolly 2024. 11. 4. 13:50

🔽매핑

🗨️ 데이터베이스 스키마 옵션

<property name="hibernate.hbm2ddl.auto" value="create" /> <!--기존 테이블 삭제 후 다시 생성-->
<!--create-drop : create와 동일하고 종료 시점에 테이블 drop (테스트 시 사용)-->
<!--update : 업데이트만 됨-->
<!--validate : 엔티티와 테이블이 정상 매핑되었는지 확인해줌 -->

 

• 객체와 테이블 매핑: @Entity, @Table

• 필드와 컬럼 매핑: @Column

• 기본 키 매핑: @Id

• 연관관계 매핑: @ManyToOne,@JoinColumn

 

🗨️ @Entity

  • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수.
  • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)
  • final 클래스, enum, interface, inner 클래스 사용X
  • 데이터베이스에 저장할 필드에는 final 사용 X

 

🗨️ @Table

 

 

🗨️ 필드와 컬럼 매핑

@Entity //JPA가 관리해야할 엔티티라는 것을 명시
//@Table(uniqueConstraints = ) unique 제약 조건
public class Member {

    @Id
    private Long id;

    @Column(name = "name", updatable = false, nullable = false, columnDefinition = "varchar(20) default 'EMPTY'") //일반 컬럼
    private String username;

    @Column(length = 10)
    private Integer age;

    @Enumerated(EnumType.STRING) //enum 타입 이넘 문자로 저장
//    @Enumerated(EnumType.ORDINAL) 기본값, enum 순서를 저장 : enum에 값이 추가되면 숫자가 모두 섞임.
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP) //날짜 타입 : LocalDate, LocalDateTime을 사용하면 생략 가능
    private Date createdDate;
    
    private LocalDate lastModifiedDate;

    @Lob //varchar 이상의 큰 문자열 : blob(문자 외), clob(문자) 타입과 매핑
    private String description;

    //@Transient : db와 관계없이 메모리에서만 하고 싶어

 

🗨️기본 키 매핑

  • 직접 할당: @Id만 사용
  • 자동 생성(@GeneratedValue)
    • AUTO
      • 방언에 따라 자동 지정, 기본값  
    • IDENTITY
      • 데이터베이스에 위임
      • MySQL의 AUTO_ INCREMENT
      • 처음에는 null로 들어감. 그래서 commit 하기 전에 insert 쿼리문을 실행해서 PK값을 가져와서 buffer가 불가능
    • SEQUENCE
      • 데이터베이스 시퀀스 오브젝트 사용, ORACLE
      • 유일한 값을 순서대로 생성
    • TABLE
      • 키 생성용 테이블 사용, 모든 DB에서 적용 가능하지만 성능이 떨어짐
      • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉 내내는 전략

 

🗨️식별자 전략

  • Long형 + 대체키 + 키 생성전략 사용

'자바 > JPA 프로그래밍' 카테고리의 다른 글

2. JPA 시작, 내부 구조  (0) 2024.11.03
JPA 소개  (0) 2024.11.02