[JPA] 엔티티 매핑

2024. 1. 29. 22:41Web/JPA

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

• 필드와 컬럼 매핑: @Column

• 기본 키 매핑: @Id

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

 

객체와 테이블 매핑

@Entity

• @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.

• JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수

• 주의

   • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)

   • final 클래스, enum, interface, inner 클래스 사용X

   • 저장할 필드에 final 사용 X

 

@Entity 속성 정리

• 속성: name

• JPA에서 사용할 엔티티 이름을 지정한다.

• 기본값: 클래스 이름을 그대로 사용(예: Member)

• 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.

 

@Table

 

데이터베이스 스키마 자동 생성

• DDL을 애플리케이션 실행 시점에 자동 생성

• 테이블 중심 -> 객체 중심

• 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

• 이렇게 생성된 DDL은 개발 장비에서만 사용

• 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬 은 후 사용

 

데이터베이스 스키마 자동 생성 - 속성

데이터베이스 스키마 자동 생성 - 주의

운영 장비에는 절대 create, create-drop, update 사용하면 안된다.

• 개발 초기 단계는 create 또는 update

• 테스트 서버는 update 또는 validate

• 스테이징과 운영 서버는 validate 또는 none

DDL 생성 기능

• 제약조건 추가: 회원 이름은 필수, 10자 초과X

     • @Column(nullable = false, length = 10)

• 유니크 제약조건 추가

     • @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",

                                                                                     columnNames = {"NAME", "AGE"} )})

• DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.

 

필드와 컬럼 매핑

요구사항 추가

1. 회원은 일반 회원과 관리자로 구분해야 한다.

2. 회원 가입일과 수정일이 있어야 한다.

3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제 한이 없다.

 

매핑 어노테이션 정리

@Entity
public class Member {

    @Id
    private Long id;

    @Column(name = "name") //DB 컬럼을 name이라고 써야하는경우
    private String username;

    private Integer age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP) //date 타입설정
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob // 데이터 베이스에 굉장히 큰 데이터를 넣어야하는 경우 Lob을 씀
    private String description;

RoleType 추가 생성

실행시

테이블이 생성이 된다

@Transient 는 

매핑 무시가되어 테이블이 생성된다.

DB 에서 관리가 되지않고 메모리에서만 관리가 된다.

@Column

updateble 

 updateble = false로 할시 DB에서 강제로 업데이트 하지않는이상 절대로  변경되지 않는다.

nullable

nullable = false 설정시 not null 제약조건이 추가 된다.

unique 

unique 제약조건이 추가된다.

운영에서는 자주 사용되지않는다.

이름이 랜덤적으로 적용되어 알아보기가 힘들어 사용하지 않게되었다.

unique 제약조건은 이런식으로 많이 사용한다 이렇게 사용하게 된다면 제약조건 이름까지 명시할수 있기때문

columnDefinition 

columnDefinition 을 사용하면 내가 주고자했던 제약조건이 DDL문에 그대로 들어가게된다.

 

@Enumerated

자바 enum 타입을 매핑할 때 사용

주의! ORDINAL 사용X

 

ORDINAL을 사용한다면

ROLETYPE이 3개가 되었을때 구분할수가 없다.

그래서 STRING 타입을 써야한다.

정상적으로 구분할수 있게된다.

 

@Temporal

데이터 타입만 이렇게 정해줘도 JPA가 변환해줘서 DB에 적용이된다.

 

@Lob

데이터베이스 BLOB, CLOB 타입과 매핑

• @Lob에는 지정할 수 있는 속성이 없다.

• 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑

    • CLOB: String, char[], java.sql.CLOB

    • BLOB: byte[], java.sql. BLOB

반응형

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

[JPA] 영속성 관리  (0) 2024.01.22
[JPA] JPA 프로젝트 생성  (1) 2024.01.17
[JPA] JPA 소개  (2) 2024.01.02