JPA에서 관리되고 있는 Class 즉, 객체
번역하면 persistence
객체가 공간을 자유롭게 유지하고 이동할 수 있는 객체의 성질

영속성 컨텍스트에 접근하여 Entity를 조작하기 위해선 Entity Manager가 필요하다.
EntityManagerFactory를 이용해서 Entity Manager를 생성 가능하다.
DB 1개당 1개만 생성 가능
META-INF 처럼 persist.xml 파일 만들어서 EntityManagerFactory 생성됨
DB의 무결성과 정합성을 유지하기 위한 즉, 안전하게 관리하기 위한 개념

트랜잭션에는 여러 SQL을 담을 수 있다.
SQL 변경중 하나라도 실패하면 전부 되돌림
START TRANSACTION; # 트랜잭션을 시작합니다.
INSERT INTO memo (id, username, contents) VALUES (1, 'Robbie', 'Robbie Memo');
INSERT INTO memo (id, username, contents) VALUES (2, 'Robbert', 'Robbert Memo');
SELECT * FROM memo;
COMMIT; # 트랜잭션을 커밋합니다.
SELECT * FROM memo;
JPA는 이런 트랜잭션 개념을 활용했다.
JPA에서도 영속성 컨텍스트에서 쓰기 지연 저장소에서 전부 가지고 있다가 Commit이 되면 전부 반영한다.
@Test
@DisplayName("EntityTransaction 성공 테스트")
void test1() {
EntityTransaction et = em.getTransaction(); // EntityManager 에서 EntityTransaction 을 가져옵니다.
et.begin(); // 트랜잭션을 시작합니다.
try { // DB 작업을 수행합니다.
Memo memo = new Memo(); // 저장할 Entity 객체를 생성합니다.
memo.setId(1L); // 식별자 값을 넣어줍니다.
memo.setUsername("Robbie");
memo.setContents("영속성 컨텍스트와 트랜잭션 이해하기");
em.persist(memo); // EntityManager 사용하여 memo 객체를 영속성 컨텍스트에 저장합니다.
et.commit(); // 오류가 발생하지 않고 정상적으로 수행되었다면 commit 을 호출합니다.
// commit 이 호출되면서 DB 에 수행한 DB 작업들이 반영됩니다.
} catch (Exception ex) {
ex.printStackTrace();
et.rollback(); // DB 작업 중 오류 발생 시 rollback 을 호출합니다.
} finally {
em.close(); // 사용한 EntityManager 를 종료합니다.
}
emf.close(); // 사용한 EntityManagerFactory 를 종료합니다.
}
et 라는 트랜젝션을 시작해서 em 라는 매니저(영속성 컨텍스트)에 memo객체를 저장하는 과정