JPA에서 가장 중요한 2가지
1. ORM(Object Relational Mapping) : 객체와 관계형 데이스 매핑
2. 영속성 컨텍스트
엔티티매니져 팩토리
는 하나만 생성해야하고, 애플리케이션 전체에서 공유한다.엔티티매니저
는 쓰레드 간에 공유하면 안된다.- JPA의 모든 데이터 변경은 트랜잭션 안에서 진행된다.
JPA를 이해하는데 가장 중요한 언어이다.
'엔티티를 영구 저장하는 환경' 이라는 뜻이다.
EntityManager.persist(entity)
엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.
멤버 엔티티
@Entity public class Member { @Id private Long id; private String name; constructor(Long id,String name){ this.id = id; this.name = name; } }
객체를 생성한 상태라고 보면 쉽겠다.
Member member = new Member(1L,"회원");
객체를 생성하고 엔티티매니저를 생성해주고 실행시켜준다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
객체를 저장한다 => 영속
em.persist(member)
detach는 회원 엔티티를 영속성 컨텍스트에서 분리하는 것이다 : 준영속
remove 는 객체를 삭제한 상태이다.
Member member = em.find(Member.class,1L)
Member member = em.find(Member.class,1L)
member.setName ="LALA";
객체를 변경시키고 em.update 나 em.persist를 해주지 않아도 반영이 된다..
오..
conmmit()
트랜잭션 커밋 순간 까지 SQL을 보내지 않고 있다가 한번에 보내준다.플러시를 하더라도 변경 내용을 DB에 동기화만 하고 영속성 컨텍스트를 비우지 않는다.
커밋 직전에만 동기화 하면 됨
영속성 컨텍스트를 플러시하는 법
1. em.flush() - 직접 호출
2. 트랜잭션 커밋 - 플러시 자동 호출
3. JPQL 쿼리 실행 - 플러시 자동 호출 => SQL로 db가 변경됐는데 예전 값을 그대로 들고 있으면 안되기 때문에 플러시가 발생한다.