JPA
에서는 엔티티
는 테이블에 대응하는 하나의 클래스라고 생각하시면 편합니다.엄청나게 간단한 코드와 함께 같이 보겠습니다.
@Entity
public class Account {
String username;
String password;
}
username | passoword |
---|---|
test | 1234 |
admin | admin |
spring-boot-starter-data-jpa
의존성을 추가하고 @Entiy
어노테이션을 붙이면 테이블과 자바 클래스가 매핑이 됩니다.
그래서 JPA에서 '하나의 엔티티 타입을 생성한다'라는 의미는 '하나의 클래스를' 작성한다는 의미가 됩니다.
엔티티
라는 용어는 때로는 클래스
를 의미하는 경우도 있고, 클래스에 의해 생성된 인스턴스
를 의미하는 경우가 있습니다.
정확히 얘기 하자면, 엔티티 클래스
와 엔티티 인스턴스
혹은 엔티티 객체
라는 표현이 정확합니다.
엔티티 객체
들을 관리
하는 역할을 합니다. 여기서 관리란 Life Cycle
이라고 할 수 있습니다.
엔티티 매니저
는 관리하는 엔티티 객체
들을 영속 컨텍스트(Persistence Context)
에 넣어두고, 객체들의 생사
를 관리
하게 됩니다.
영속 컨텍스트
는 JPA
가 엔티티 객체들을 모아두는 공간
이라고 이해할 수 있습니다.
이름 | 설명 |
---|---|
New(비영속) | Java 영역에만 존재하고, 데이터베이스와 연동된 적 없는 상태.순수한 Java 객체로 엔티티 매니저가 관리하지 않음 |
Managed(영속) | DB에 저장되고, 메모리상에서도 같은 상태로 존재하는 상태.PK 값을 통해 필요한 엔티티 객체를 꺼내 사용할 수 있게 됩니다. |
Removed(삭제) | DB 상에서 삭제된 상태. 객체는 영속 컨텍스트에 존재하지 않습니다. |
Detached(준영속) | 영속 컨텍스트에서 엔티티 객체를 꺼내서 사용하는 상태. 아직 DB와 동기화가 이루어지지 않은 상태 |
JPA는 자동으로 테이블을 생성할 수 있는 기능을 가지고 있어, 아래와 같은 방식을 이용할 수 있습니다.
JPA와 H2 인메모리 DB를 이용한 실습은 여기서 확인하실 수 있습니다.
그리고 MySQL과 같은 DB연동은 여기서 확인하실 수 있습니다!
JPA와 관련 어노테이션은 여기서 확인할 수 있습니다👍