티스토리 뷰

엔티티의 정의

엔티티는 사전적 정의로 개체, 실재라는 뜻을 가집니다.

JPA에서는 가볍게 데이터 모델링에서 사용되는 객체라고 생각하시면 됩니다.

코드를 가볍게 살펴봅시다.

import lombok.AccessLevel;
import lombok.Getter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.Duration;

@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Movie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    private Long id;

    @Column(name = "movie_code")
    private String movieCode;

    @Column(name = "korea_movie_name")
    private String koreaMovieName;

    @Column(name = "english_movie_name")
    private String englishMovieName;

    @Column(name = "production_year")
    private String productionYear;

    @Column(name = "director_name")
    private String directorName;
    @Column(name = "running_time")
    private Duration runningTime;
    @Column(name = "fee")
    private Integer fee;
}

Entity 어노테이션을 통해 Movie 객체를 엔티티라고 명시할 수 있습니다.

이 코드에서 엔티티의 한 가지 특징을 살펴볼 수 있습니다.

엔티티는 유일한 식별자를 가지고 있어야 한다.

Id 어노테이션을 통해 Movie 엔티티를 유일한 식별자로 선언합니다.

즉, 객체를 엔티티로 사용하려면 식별자를 선언해주어야 합니다.

엔티티의 생명주기

엔티티는 비영속, 영속, 준영속, 삭제 총 4가지 상태가 존재합니다.

다음 그림은 엔티티의 생명 주기를 나타낸 그림입니다.

비영속(new/transient)

비영속은 영속성 컨텍스트와 전혀 관계가 없는 상태를 의미합니다.

엔티티 객체를 생성했으나, 아직 저장하지 않은 상태입니다.

public void save() {
    Movie movie = Movie.builder()
            .directorName("James Cameron")
            .koreaMovieName("아바타: 물의 길")
            .englishMovieName("Avatar: The Way of Wate")
            .fee(20000)
            .build();
}

영속(managed)

영속은 영속성 컨텍스트에 저장된 상태를 의미합니다.

엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장하면 엔티티는 영속 상태가 됩니다.

@Service
@RequiredArgsConstructor
public class MovieService {
    @PersistenceContext
    private EntityManager em;

    public void save() {
        Movie movie = Movie.builder()
                .directorName("James Cameron")
                .koreaMovieName("아바타: 물의 길")
                .englishMovieName("Avatar: The Way of Wate")
                .fee(20000)
                .build();
        
        em.persist(movie);
    }
}

해당 Movie는 em.find()를 통해 조회도 가능합니다.

준영속(detached)

준영속은 영속성 컨텍스트에 저장되었다가 분리된 상태입니다.

em.detach()나 em.close(), em.clear()를 하면 엔티티는 준영속 상태가 됩니다.

public void detach(Movie movie) {
    em.detach(movie);
}

public void close() {
    em.close();
}

public void clear() {
    em.clear();
}

삭제(removed)

이름 그대로 삭제된 상태입니다.

em.remove()를 통해 영속성 컨텍스트와 데이터베이스에서 삭제할 수 있습니다.

public void remove(Movie movie) {
    em.remove(movie);
}

출처

 

자바 ORM 표준 JPA 프로그래밍 | 김영한 - 교보문고

자바 ORM 표준 JPA 프로그래밍 | 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA

product.kyobobook.co.kr

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함