본문 바로가기
Java/ORM

JAVA ORM - JPA(엔티티 매핑)

by 티코딩 2024. 7. 31.

애너테이션

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

필드 - 컬럼 매핑 :  @Column

기본 키 매핑 : @Id

연관관계 패핑 : @ManyToOne, @OneToMany, @JoinColumn

위의 애너테이션을 붙혀줘야 JPA가 관리할 수 있다.

객체-테이블 매핑

@Entity를 붙히면 클래스를 테이블로 매핑을 해준다.

기본 생성자는 필수. final클래스, enum, interface, inner클래스는 X

저장할 필드에는 final사용 X

아래는 예시 Entity

@Entity
@Table(name = "app_user")
@Getter
@Setter
public class User {
    @Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "USERNAME", nullable = false)
    private String username;
    @Column(name = "PASSWORD", nullable = false)
    private String password;
    @Column(name = "EMAIL", nullable = false)
    private String email;
    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Authority> authorities;
}

스키마 자동 생성

hibernate.hbm2ddl.auto 의 옵션

애플리케이션 로딩시 테이블을 만들어내는 옵션.

create : 기존테이블 삭제 후 다시생성

create-drop : create와 같은데 종료시 테이블 drop

update : 변경분만 반영(운영DB 에선 X)

validate : 정상 매핑된지만 확인

none : 사용X

 

운영중에는 create, create-drop, update 쓰면 절대 안됨.

개발초기에는 create or update, 테스트서버에는 update, validate

운영서버에는 validate or none

 

필드 - 컬럼 매핑

위의 예시처럼 컬럼에는 @Column 애너테이션을 붙혀준다. 타입도 JPA가 알아서 알잘딱깔센 해서 바꿔준다. 

name을 설정해주면 데이터베이스에 컬럼명을 설정해줄수있다.

nullable은 기본값은 true이며, false로 지정해주고싶으면 nullable = false로 따로 지정해줘야한다.

unique는 컬럼의 값의 유일성을 부여해준다. 기본값은 false.

length는 컬럼의 값의 길이를 지정해준다.(varchar의 길이)

precision는 소수점 숫자의 전체 자리수를 지정해준다.

 

Java.util.Date, Java.util.Calendar 타입은 @Temporal 애너테이션을 사용해준다.

@Temporal 애너테이션의 옵션은

DATE : 날짜 부분만 저장

TIME : 시간 부분만 저장

TIMESTAMP : 날짜와 시간 모두 저장

(LocalDate - date로 저장, LocalDateTime - timestamp로 저장, 을 쓰는게 좋다) 

 

Enum타입에는 @Enumerated 를 붙혀주고((EnumType.STRING)을써주자), 바차를 넘는 큰 컨텐츠를 매핑할때는 @Lob을 써준다.

DB에는 반영하지않고 메모리에서만 쓰고싶을땐 @Transient를 붙혀준다.

 

기본 키 매핑

위의 예시에서

@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Id 가 붙은 필드가 기본키가 되며 기본키는 테이블당 하나씩은 무조건 가져야 한다.

@GenratedValue는 기본키를 직접 생성해줄필요 없이 자동생성해준다.

IDNTITY : 기본키생성을 DB에 위임

AUTO : DB방언에 맞춰서 자동생성

SEQUNCE : 시퀀스 오브젝트를 만들어내고 값을 가져옴

TABLE : 키 생성 전용 테이블을 만들어서 시퀀스 비스무리하게 만듬.