JPA 7

[JPA] 영속성 관리[5]

병합 : merge()merge() 메소드는 준영속 상태의 엔티티를 받아서 그 정보로 새로운 영속 상태의 엔티티를 반환한다.public class ExamMergemain {    static EntityManagerFactory emf =        Persistence.createEntitymanagerFactory("jpabook");        public static void main(String args[]) {        Member member = createMember("memberA", "회원1");        member.setUsername("회원명변경");        mergeMember(member);        }     static Member createMembe..

스프링 2024.12.10

[JPA] 영속성 관리[4]

플러시 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정이다.변경 감지가 동작해서 영속성 컨텍스트의 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다.쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다 영속성 컨텍스트를 플러시하는 방법 em.flush() 직접 호출트랜잭션 커밋 시 자동 호출JPQL 쿼리 실행 시 자동 호출 플러시 모드 옵션 엔티티 매니저에 플러시 모드를 직접 지정하려면 javax.persistence.FlushModeType을 사용하면 된다.FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시(기본값)FlushModeType.COMMIT : 커밋할 때만 플러시 * 플러..

스프링 2024.12.09

[JPA] 영속성 관리[3]

엔티티 등록EntityManagerFactory emf = Persistence.createEntityManagerFactory("jakarta.persistence");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();//엔티티 매니저는 데이터 변경 시 트랜잭션을 시작해야한다.tx.begin();        em.persist(memberA);em.persist(memberB);//여기까진 insert sql을 데이터베이스에 보내지 않는다.        //commit하는 순간 insert sql을 보낸다.tx.commit();Colored by Color Scriptercs 엔티티 매니저는 트..

스프링 2024.11.27

[JPA] 영속성 관리[2]

영속성 컨텍스트의 특징 1. 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분한다.    따라서 영속 상태는 식별자 값이 반드시 있어야 한다.2. 영속성 컨텍스트에 엔티티를 저장하면 JPA는 트랜잭션을 커밋하는 순간 엔티티를 데이터베이스에 반영하며, 이것을 플러시(flush)라 한다.3. 영속성 컨텍스트가 엔티티를 관리하면 다음과 같은 장점이 있다.1차 캐시동일성 보장트랜잭션을 지원하는 쓰기 지연변경 감지지연 로딩 엔티티 조회 영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이것을 1차 캐시라 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다.1차 캐시의 키는 식별자 값(@Id)이고 이 값은 데이터베이스 기본 키와 매핑되어 있다.ex) Member member = em.find(Member.class..

스프링 2024.11.26

[JPA] 영속성 관리[1]

엔티티 매니저 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등의 일을 처리한다. 엔티티를 관리자는 관리자인셈.엔티티 매니저는 엔티티 매니저 팩토리에서 생성하여 사용한다.  영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경" 이라는 뜻이다.엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.ex) em.persist(member);-> persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 엔티티의 생명주기 1. 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계 없는 상태순수한 객체 상태이며 저장하지 않은 상태ex)Member member = new M..

스프링 2024.11.25

엔티티 클래스(Entity Class)

JPA를 공부하며 접하게 되는 엔티티 클래스는 데이터베이스 테이블에 대응하는 클래스로 테이블과 같은 구조로 작성합니다. @Entity 엔티티 클래스는 Spring Data JPA에서는 반드시 @Entity라는 어노테이션을 추가해야만 한다. 해당 클래스가 엔티티를 위한 클래스이며, 해당 클래스의 인스턴스들이 JPA로 관리되는 객체라는 것을 의미한다. 또한, 이 어노테이션이 붙은 클래스는 옵션에 따라 자동으로 테이블을 생성하고 멤버 변수에 따라 자동으로 컬럼을 생성하기도 한다. @Table @Entity와 같이 사용 할 수 있는 어노테이션으로 데이터베이스상에서 엔티티 클래스를 어떤 테이블로 생성 할 것인지에 대한 정보를 담기 위한 용도로 쓴다. 예로 @Table(name='user_table')로 작성시 u..

스프링 2023.01.08

[Spring JPA] ORM, Spring JPA 그리고 Hibernate

JPA를 공부하기에 앞서 ORM에 대해 알아야 한다. ORM이란? Object Relational Mapping의 약자로 단어에서 보듯 객체지향과 관련이 있다. 객체지향을 자동으로 관계형 데이터베이스에 맞게 처리해주는 기법이라고 생각하면 이해가 편할 것 같다. ORM은 '객체지향'의 구조가 '관계형 데이터베이스'와 유사하다는 점에서 시작했다. 책을 읽으며 이해한대로 정리해보았다. 객체지향 관계형 데이터 베이스 비고 클래스 Table 인스턴스 Row(레코드 혹은 튜플) 객체가 데이터+메서드라는 의미라면 Row는 데이터만을 의미 참조 관계 JPA란? JPA는 Java Persistence API의 약자로 ORM을 Java 언어에 맞게 사용하는 '스펙'이다. ORM이 좀 더 상위 개념이 되고, JPA는 Jav..

스프링 2023.01.08
728x90
반응형