@Entity

  • JPA가 괸리하는 엔티티라는 어노테이션
  • 기본 생성자가 필수이다. (파라미터가 없는 protected 생성자 )
  • final 클래스, enum, interface 사용 불가
  • 저장할 필드에 final 사용 X
  • 속성 name --> JPA에서 사용할 엔티티의 이름을 설정한다. default 값은 클래스의 이름 그대로
@Entity // entity로 할 것에 붙여줍니다.
public class Member {

    @Id
    @GeneratedValue
    private Long id;
}

@Column

  • 컬럼 매핑
  • 속성
    • name: 필드와 매핑할 테이블의 컬럼 이름
    • insertable, updatable: 등록, 변경 가능 여부
    • nullable: null값 허용을 결정
    • unique: 유니크한 제약조건을 건다.
    • columnDefinition: 데이터베이스에 직접 컬럼 정보를 줄 수 있다.
    • length: 문자 길이 제약조건 String 타입에만 사용가능
    • precision, scale: 소수나 큰 자리 수
@Entity
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "member_id") // 속성을 부여할 수 있습니다. 
    private Long id;
}

@Enumerated

  • 자바 enum 타입을 매핑할 때 사용한다.
  • 속성
    • EnumType.ORDINAL: 순서를 데이터베이스에 저장
    • EnumType.STRING: 이름을 데이터 베이스에 저장
ORDINAL을 사용할 경우 추가로 Enum에 데이터를 추가했을 경우 문제가 생길 수 있다. 따라서 STRING을 사용하자

@Embeded, @Embeddable

임베디드 타입은 복합 값 타입이라고 말하며, JPA에서 새로운 값 타입을 정의해서 사용하는 방법입니다.

 

@Entity
public class Member {

    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;



   // Embedded 사용 X
    private String city;
    private String street;
    private String zipcode;
    
    // Embedded 사용 O
    @Embedded
    private Address address;
    
    
}
@Embeddable
public class Address {

    private String city;
    private String street;
    private String zipcode;

    public Address(String city, String street, String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }
}

위의 코드를 봤을 때 Embeded를 사용한다면, 응집력이 올라가고, 객체지향적인 코드를 만들 수 있다는 장점이 있습니다.


기본 키 맵핑 

  1. @Id, @Generated
    • @Id만 사용할 경우 직접 할당하며 @Generated가 붙으면 자동생성
    • 자동 생성 전략
      • IDENTITY: 데이터 베이스에 위임
      • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용
      • TABLE: 키 생성용 테이블 사용
      • AUTO: 방언에 따라 자동 지정
      • IDENTIY 예시

IDENTITY 예시

@Entity
public class User{

  @Id @Generated( strategy = GenerationType.IDENTITY)
  private Long id;
}

SEQUENCE 예시

@Entity
@SequenceGeneratort(
  name = " USER_SEQ_GENERATOR "
  sequenceName = " USER_SEQ "
  initiaValue = 1, allocatioSize = 1)  // 시작 지점, 한 번에 가져올 SIZE 
public class User{

  @Id 
  @Generated( strategy = GenerationType.SEQUENCE, generator = "USER_SEQ_GENERATOR" )
  private Long id;
식별자 전략
1. 기본 키 제약 조건: null 이면 안되고, 유일, 변하면 안된다.
2. 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다.
3. 권장형: Long + key

 

참고

https://book.naver.com/bookdb/book_detail.nhn?bid=9252528 

 

자바 ORM 표준 JPA 프로그래밍

자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA 기초 이론과 핵심 원리, 그리고

book.naver.com

 

'SpringBoot > JPA' 카테고리의 다른 글

Spring-Data-JPA [5] Fetch Join  (0) 2022.03.24
Spring-data-JPA [4] Update와 @Query  (0) 2022.03.23
Spring-data-JPA [3] 명명법  (0) 2022.03.22
Spring-data-JPA(2) 개념  (0) 2022.01.06
Spring-data-JPA(0) JPA란??  (0) 2022.01.06