EntityManager.persist(entity);
DB에 저장한다는 코드가 아니라 영속성 컨텍스트에 저장한다는 뜻
User user = new User();
user.setId(1L);
user.setName("userA");
현재 객체를 생성만 하고 영속성 컨텍스트에 저장하지 않은 상태이기에 비영속성이다.

EntityManager em = emf.createEntityManager();
...
User user = new User();
user.setId(1L);
user.setName("userA");
em.persist(user);
em(영속 컨텍스트)에 persist(영속성 컨텍스트에 저장)하여 user는 영속성 객체가 됨, 이제부터 JPA가 관리하는 객체라는 것이다.
하지만 영속성 컨텍스트에 저장한다고 바로 DB에 저장되지 않는다.
tx.commit();
트랙젝션이 종료하는 시점에 커밋이되어 DB에 insert문이 날라가 저장된다.
즉 em.pserist는 DB에 저장하는 save메서드가 아니다.

em.persist(user);
User findUser = em.find(User.class, user.getId);
persist하면 1차캐시에 저장된다.
find로 user를 찾게 되면 먼저 DB에서 찾지 않고 1차 캐시를 먼저 확인한다.
만약 캐시에 값이 없는 경우 DB에서 1차캐시로 가져온 후 반환한다.
단 애플리케이션 전체에서 공유하는 캐시X 하나의 트랙젝션에서만 유지하기에 굉장히 짧은시간 유지하는 캐시이다.
User A = em.find(User.class, 1L);
User B = em.find(User.class, 1L);
A == B = true
같은 트랙젝션 안에서 userA와 userB는 같은 객체로 동일성을 보장한다.
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
엔티티 매니저는 데이터 변경시 트랜잭션 안에서 이뤄져야 한다.
tx.begin(); //트랜잭션 시작
em.persist(userA);
em.persist(userB);
persist는 영속성 컨텍스트에 저장하는 거지 DB에 커밋하여 저장하는 메서드가 아니다.
tx.commit();
커밋(commit)으로 DB 반영 동시에 트랙잭션 종료가 된다.

변경하고 싶은 엔티티 조회 하여 영속석 컨텍스트에 가져온 후, 변경 점 체크
-> 변경 감지
-> 쓰기 지연 SQL 저장소 등록
-> 변경 사항 commit (이때 Query문이 나간다.)
JPA 변경 감지 정리 글... 이게 맞나..? 나중에 수정될 수 있음
출처 / 참고: Iflearn 김영한 강사님 강의