드디어 JPA 스터디원을 구해서 스터디를 시작했습니다! (짝짝짝)
1~2장은 도입 부분이라 각자 읽기로 했고 3장은 제가 발표하게 되었습니다!
발표자는 돌아가면서 하기로 했지만 저는 글 작성을 위해 계속 자료를 작성해보려 합니다! 화이팅!
공부한 서적: 자바 ORM 표준 JPA 프로그래밍
엔티티 매니저 팩토리
엔티티 매니저
[그림1. 생명 주기]
비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
영속성 컨텍스트나 데이터베이스와 전혀 관련 없는 상태
객체만 생성한 상태
Member member = new Member();
member.setid("member1");
member.setUsername("회원1");
영속(managed) : 영속성 컨텍스트에 저장된 상태
준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제(removed) : 삭제된 상태
식별자 값 (@Id )이 반드시 있어야 한다.
트랜잭션을 커밋하는 순간 영속성 컨텍스트에 있는 엔티티를 데이터베이스에 반영 → 플러시
장점
1차 캐시
동일성 보장
Member a = em.find(Member.class, "member1");
Member b = em.find(Member.class, "member1");
a == b (성립)
같은 캐시에 있는 엔티티 인스턴스를 반환하므로 두 객체 a,b 의 값은 같다. 즉 동일성을 보장 한다.
동일성 : 참조값을 비교하는 == 비교의 값이 같다.
동등성 : 실제 인스턴스는 달라도 인스턴스가 가지고 있는 값이 같은 경우
Member a = new Member();
a.setId("member1");
Member b = new Member();
b.setId("member1");
a == b (성립 하지 않음, 객체 인스턴스가 다르다.)
자바에서 동등성 비교는 equals() 를 오버라이딩 하여 구현 해줘야 한다.
하지만 두 객체간 정확한 비교를 위해서는 hashCode() 역시 재정의 해줘야 하는사실
-> hashCode() 비교 후 같은 해시값일 경우 equals()로 값 비교
트랜잭션 지원하는 쓰기 지연
변경 감지 (dirty checking)
지연 로딩(lazy loading)