본문 바로가기

JPA24

JPA - 준영속, 병합 1. 준영속 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것을 준영속 상태라 한다. 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속 상태를 만드는 방법 3가지 1 em.detach(entity) 특정 엔티티만 준영속 상태로 전환 2 em.clear() 영속성 컨텍스트를 완전히 초기화 3 em.close() 영속성 컨텍스트를 종료 detach(Entity) public void testDetached() { // 회원 엔티티 생성, 비영속 상태 Member member = new Member(); member.setId("memberA"); member.setUsername("회원A"); // 회원 엔티티 영속 상태 em.p.. 2022. 4. 8.
JPA - 플러시 플러시 발생 영속성 컨텍스트의 변경내용을 데이터 베이스에 반영한다. 구체적으로 다음과 같은 일이 순차적으로 일어난다. 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다(등록, 수정, 삭제 쿼리) 참고로 플러시는 영속성 컨텍스트를 비우지 않는다. 플러시는 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업이다. 영속성 컨텍스트의 변경내용을 DB에 동기화한다. 영속성 컨텍스트를 플러시하는 방법 em.flush() - 직접호출 트랜잭션 커밋 - 플러시 자동 호출 JPQL 쿼리 실행 - 플러시 자동호출 1. 직접호출 // 영.. 2022. 4. 8.
JPA - 영속성 컨텍스트 영속성 컨텍스트의 뜻은 "엔티티를 영구 저장하는 환경" 이라는 뜻이다. em.persister(Entity)는 사실 DB에 저장하는 것이 아니라 영속성 컨텍스트에 저장하는 것이다. 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티매니저를 통해서 영속성 컨텍스트에 접근 (엔티티매니저가 생기면 영속성 컨텍스트도 생긴다.) 엔티티 매니저 팩토리와 앤티티 매니저 J2SE 환경과 J2EE, 스프링 프레임워크 환경의 차이 *J2SE란 - Java 2 Standard Edition(기본 환경) 엔티티의 생명주기 비영속(new/transient) 비영속 컨텍스트와 전혀 관계가 없는새로운 상태 영속(managed) 영속성 컨텍스트에관리되는 상태 ★영속성 상태란 정확하게 말하면 1차 캐시 저장소에 올라가있는.. 2022. 4. 7.
JPA를 배워야 하는 이유 JPA를 배워야 하는 이유 1. SQL 중심적인 개발의 문제점 지루한 코드를 무한반복 개발해야한다. 자바 객체를 SQL로 SQL을 자바객체로 매핑해주어야 한다 사실상 개발자는 SQL Mapper의 역할을 하게 된다. class Member { private String userId; private String username; } INSERT INTO MEMBER VALUES (.....) 만약 Member 테이블에 필드가 추가되면, Member 테이블과 관련된 모든 쿼리는 수정이 필요하다. 2. 패러다임의 불일치 객체 vs 관계형 데이터베이스 ‘객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.’ 객체를 영구 보관하는 다양한.. 2022. 4. 6.