DAY65(2) - 엔티티 매핑

은나현·2023년 4월 27일
0
post-thumbnail

📌 1. 매핑 어노테이션

📍 1-1. 기본 어노테이션

  • 객체 - 테이블 매핑 : @Entity, @Table
  • 필드 - 컬럼 매핑 : @Column
  • 기본 키 매핑 : @Id
  • 연관관계 매핑 : @ManyToOne, @JoinColumn

📍 1-2. @Entity

  • @Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라 한다.
    • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 가져야 한다.
  • 주의사항 :
    • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)
    • 저장 필드에 final 사용 X
    • final 클래스, enum, interface 클래스 사용 X
  • 속성 :
    • name : JPA에서 사용할 엔티티 이름을 지정한다.
      • 기본값 : 클래스 이름을 그대로 사용한다.
      • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.

📍 1-3. @Table

  • @Table 엔티티와 매핑할 테이블을 지정한다.
  • 속성 :
    • name : 매핑할 테이블 이름 (default : 엔티티 이름 사용)
    • catalog : 데이터베이스 catalog 매핑
    • schema : 데이터베이스 schema 매핑
    • uniqueConstraints(DDL) : DDL생성 시에 유니크 제약조건 생성

➕ hibernate.hbm2ddl.auto

  • DDL 명령어에 대한 자동 생성 여부 옵션
    <property name="hibernate.hbm2ddl.auto" value="none" />
  • 해당 옵션은 테이블 / 컬럼 생성에 관한 설정값을 제어한다.
    • create : 기존 테이블을 삭제 후 다시 생성한다.
      종료 시에는 삭제하지 않는다.
    • create-drop : 기존 테이블을 삭제 후 다시 생성한다.
      종료 시에 테이블을 삭제한다.
    • update : 주어진 엔티티 구조에 따라 데이터베이스를 변경한다.
      컬럼의 삭제는 반영하지 않으며 추가만 반영된다.
    • validate : 엔티티와 테이블이 정상적으로 매핑되었는지만 확인한다.
    • none : 기본 설정값으로, 데이터베이스에 변화를 주지 않는다.
  • 테이블을 삭제하거나 수정하는 것은 큰 문제가 될 수 있으므로 create, create-drop, update 옵션 등은 사용하지 않고 직접 데이터베이스를 조작하는 것이 좋다.

📍 1-4. @Column 외

  • 각 필드에 속성이나 제약 조건을 설정하고 싶을 때 사용한다.
  • @Column 속성

    • 예시 : username이라는 이름의 열, 필수, 10자 초과 X
      @Column(name = "username", nullable = false, length = 10)
  • @Column 외 다른 필드 어노테이션

    • 예시 : 날짜 타입 매핑
      @Temporal(TemporalType.TIMESTAMP)
    • @Transient
      • 필드 매핑 X
      • 데이터베이스에 저장 X, 조회 X
      • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

➕ DDL 생성 기능

  • 제약조건, 유니크 제약조건 추가 등의 DDL 생성 기능은 DDL을 자동 생성할 때(create 등)만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.
    • 유니크 제약조건 추가 예시
    @Table(uniqueConstraints ={
    	@UniqueConstraint(name="NAME_AGE_UNIQUE",
        columnNames={"NAME","AGE"})})

📍 1-5. 기본 키 매핑(@Id, @GeneratedValue)

  • @Id : 직접 할당
  • @GeneratedValue : 자동 생성
    • IDENTITY : 데이터베이스에 위임
    • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용
      • ORACLE(@SequenceGenerator)
    • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용 가능
      • @TableGenerator
    • AUTO : 방언에 따라 자동 지정, 기본값
      • DB방언에 따라 위의 3가지 중 하나가 선택됨
  • @GeneratedValue 시퀀스 사용 예시
    • DB에서 시퀀스 바로 생성
      @Id 
      @GeneratedValue(strategy = GenerationType.SEQUENCE)
      private Long id;
    • 클래스에서 설정한 시퀀스 사용
      @Entity @Getter @Setter
      @SequenceGenerator(
      		name = "MEMBER_SEQ_GENERATOR",
      		sequenceName = "MEMBER_SEQ",
      		initialValue = 1, allocationSize = 1 )
      public class Member {
      	@Id 
      	@GeneratedValue(strategy = GenerationType.SEQUENCE, 
      					generator = "MEMBER2_SEQ_GENERATOR")
      	private Long id;
       }

0개의 댓글