Kangjieun11 2022. 10. 27. 01:06
728x90

 

엔티티

- DB에서 영속적으로 저장된 데이터자바 객체로 매핑'인스턴스 형태'로 존재하는 데이터를 말함.

- 테이블에 대응하는 하나의 클래스

- 엔티티로 만들고 싶은 클래스에 @Entity 어노테이션을 붙혀주면 된다.

 

 

만약 Database에 다음과 같은 테이블이 있다고 가정하자

 

Table

username  password
jieun 1234
jin 1111

 

spring-boot-starter-data-jpa 의존성을 추가하고

자바 클래스에 @Entity 어노테이션을 붙히면 

테이블 - 자바 클래스가 매핑이 된다. 

 

@Entity
public class Account{
	String username;
    String password;
}

 

JPA에서 하나의 엔티티 타입을 생성한다는 것은 하나의 클래스를 작성한다는 의미가 됨

 

 

* 주의할점 *

1) 기본 생성자를 필수로 작성해야함 (public or protected)

▶ JPA를 구현해 쓰는 라이브러리들이 Reflection을 사용하는 경우가 있기 때문에

 

2) @Entity 어노테이션을 final, enum, interface, inner 클래스에 사용할 수 없다.

3) Db에 저장할 필드에는 final 키워드를 작성하면 안된다. 

 

 

 

엔티티 매니저 

- 엔티티 객체들을 관리(life cycle)하는 역할 

- 엔티티 매니저는 관리하는 엔티티 객체를 영속 컨텍스트(Persistence Context)에 넣어두고, 객체의 생사를 관리 함.

 

 

영속 컨텍스트

- JPA가 엔티티 객체들을 모아두는 공간

이름 의미 설명
New 비영속 - Java 영역에만 존재
- DB와 연동된적 없는 상태
- 순수한 Java 객체, 엔티티 매니저가 관리 x
Managed 영속 - DB에 저장되고 메모리상에서도 같은 상태로 존재함.
- PK값을 통해 필요한 엔티티 객체를 꺼내 사용할 수 있음
Removed 삭제 - DB상에서 삭제된 상태
- 삭제된 객체는 영속 콘텍스트에 존재하지 않음.
Detached 준영속 - 영속 컨텍스트에서 엔티티 객체를 꺼내서 사용하는 상태
- 아직 DB와 동기화가 이루어지지 않은 상태

 

 

엔티티 클래스 설계

JPA는 자동으로 테이블을 생성하는 기능을 갖고 있어서 다음과 같은 방식을 사용할 수 있다. 

1) SQL을 이용해 테이블을 먼저 생성 후 엔티티 클래스를 만드는 방식

2) JPA를 이용해 클래스만 설계하고 자동으로 테이블 생성하는 방식

 

설계 과정

1) 객체지향의 설계대로 클래스들을 설계함

2) @Id, @Column을 이용해 각종 제약 조건을 추가, 설정

3) 엔티티간 연관관계를 설정함. 

 

관련 어노테이션

https://www.techferry.com/articles/hibernate-jpa-annotations.html

 

Hibernate - JPA Annotations

Part 2: Hibernate - JPA Annotations This tutorial is part 2 of 5-part tutorial on JEE annotations. We recommend that you read Prerequisite section first, review the abstract and Example Application to understand the context. You can also jump to other part

www.techferry.com

 

@Id

- 해당 컬럼이 식별키(PK)라는 것을 의미함

- 모든 엔티티에 반드시 @Id를 지정해야함

 

@Column

- 인스턴스 변수가 컬럼이 되기 때문에, 컬럼명을 별도로 지정하거나 컬럼의 사이즈/제약조건들을 추가하기 위해 사용

 

@Table

- 클래스가 테이블이 되기 떄문에 클래스 선언부에 작성

- 테이블명 결정

- 지정 안할 경우, 클래스명으로 테이블이 생성 됨

 

@Entity

- 해당 클래스의 인스턴스들이 엔티티임을 명시함

 

 


 

 

출처

https://seongwon.dev/Spring/20220823-JPA-%EC%97%94%ED%8B%B0%ED%8B%B0%EB%A7%A4%ED%95%91/

https://velog.io/@jayjay28/%EC%97%94%ED%8B%B0%ED%8B%B0Entity



나중에 엔티티 매핑 코드 관련해서도 글을써야겠다.