
Entity
JPA에서 관리되는 클래스 즉, 객체를 의미
Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리
@Entity(name = "클래스명") : JPA가 관리할 수 있는 Entity 클래스로 지정 (default: 클래스명)
-Entity 클래스 이름을 지정할 수 있다.
-JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인해야 한다.
@Table(name = "Entity") : 매핑할 테이블을 지정
-매핑할 테이블의 이름을 지정할 수 있다. (default: Entity 명)
@Column
-(name = "username") 필드와 매핑할 테이블의 컬럼을 지정할 수 있다. (default: 객체의 필드명)
-(nullable = false) 데이터의 null 값 허용 여부를 지정할 수 있다. (default: true)
-(unique = true) 데이터의 중복 값 허용 여부를 지정할 수 있다. (default: false)
-(length = 500)데이터 값(문자)의 길이에 제약조건을 걸 수 있다. (default: 255)
@Id : 테이블의 기본 키를 지정
-기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행
-식별자 값을 넣어주지 않고 저장하면 오류가 발생
-옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생
@GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임
@GeneratedValue(strategy = GenerationType.IDENTITY)
->id bigint not null auto_increment : auto_increment 조건이 추가된 것을 확인할 수 있다.
->해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가됨
영속성 컨텍스트
Persistence -> 영속성, 지속성 이라는 뜻
Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회, 수정, 삭제 가능

EntityManager
-영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요
-EntityManager를 사용해서 Entity를 저장, 조회, 수정, 삭제
-EntityManagerFactory를 통해 생성하여 사용
EntityManagerFactory

-일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용
-만들기 위해서는 DB에 대한 정보를 전달해야 한다.
->정보를 전달하기 위해서는 /resources/META-INF/ 위치에 persistence.xml 파일을 만들어 정보를 넣어두면 된다.
JPA의 트랜잭션
트랜잭션이란
-DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념
(DB의 데이터들을 안전하게 관리하기 위해서 생겨난 개념)
-가장 큰 특징은 여러 개의 SQL이 하나의 트랜잭션에 포함
-모든 SQL이 성공적으로 수행이 되면 DB에 영구적으로 변경을 반영하지만 SQL 중 단 하나라도 실패한다면 모든 변경을 되돌린다.
JPA 트랜잭션
-JPA는 DB의 트랜잭션 개념을 사용하여 효율적으로 Entity를 관리
-영속성 컨텍스트에 Entity 객체들을 저장했다고 해서 DB에 바로 반영 되지는 않는다.
-DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼 JPA에서도 영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 "쓰기 지연 저장소"에 전부 가지고 있다가 마지막에 SQL을 한번에 DB에 요청해 변경을 반영
-적용하기 위해서는 EntityManager에서 EntityTransaction을 가져와 트랜잭션을 적용
EntityTransaction et = em.getTransaction();et.begin(); -> 트랜잭션을 시작하는 명령어et.commit(); -> 트랜잭션의 작업들을 영구적으로 DB에 반영하는 명령어et.rollback(); -> 오류가 발생했을 때 트랜잭션의 작업을 모두 취소하고, 이전 상태로📝오늘의 회고
아직 갈 길이 멀다~!!
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~