개발기술/ORM (7) 썸네일형 리스트형 Persistence Context, EntityManager 트랜잭셔널이 자동으로 걸리는지 검증lazyloading이랑 영속성 컨텍스트랑 어떻게 연관되는지 Persistence Context Persistence Context의 핵심 기능기능설명1차 캐시 (First-Level Cache)같은 엔티티를 여러 번 조회해도 DB 쿼리를 다시 날리지 않음엔티티 동일성 보장같은 영속성 컨텍스트 안에서는 동일한 ID의 엔티티는 항상 같은 객체 (== 비교 true)변경 감지 (Dirty Checking)트랜잭션 커밋 시, 엔티티의 변경 사항을 감지해 자동으로 update 쿼리를 생성쓰기 지연 (Write-Behind)persist/save한 insert 쿼리를 모아뒀다가 트랜잭션 종료 시 한꺼번에 실행지연 로딩 (Lazy Loading)프록시 객체로 관계 엔티티를 .. JPA 쿼리기능 JPQL, QueryDSL, 네이티브SQL JPA에서 제공하는 주요 조회 방법JPA는 객체를 기반으로 검색할 수 있도록 여러 가지 방법을 제공합니다.조회 방법설명JPQL (Java Persistence Query Language)엔티티 객체를 대상으로 SQL과 유사한 문법으로 조회네이티브 SQLJPA에서 직접 SQL을 사용할 수 있도록 지원QueryDSLJPQL을 타입 안전하게 편리하게 작성할 수 있도록 도와주는 빌더 클래스JDBC 직접 사용 / MyBatis 같은 SQL 매퍼SQL을 직접 사용하여 조회 성능 최적화 가능 객체지향쿼리의 필요성A를 조회할 때 단순한 EntityManager.find() 또는 객체 그래프 탐색 (a.getB().getC()) 방식으로만 데이터를 조회하는 것은 어려움.모든 회원 엔티티를 메모리에 올려두고 나서 조건에 .. JPA 기타기능 (Pageable, auditing, data.sql 기능) 1. Auditing functionality : Persistency Layer에서 특정 이벤트 발생시에 자동적으로 데이터값을 생성해주는 기능을 말한다. 레코드 생성자, 생성일 등 데이터의 히스토리를 추적하는데 사용된다. Auditing 기능을 적용할 Entity 클래스에@EntityListeners (AuditingEntityListener.class)를 추가하고, 필요한 필드에 @CreatedDate나 @LastModifiedDate와 같은 애너테이션을 붙입니다. 이 entitylistener들은 entity의 lifecycle을 파악하고 lifecycle의 특정부분에 지정된 코드를 실행하도록 한다.@EntityListeners(AuditingEntityListener.class)@Configur.. JPA 활용의 필요성과 활용법 JPA의 필요성repository에서 지원하는 method만큼 sql 작성문양이 줄어든다SQL mapper을 사용할 때 필요한 dto mapping이 최소화된다데이터 테이블의 변경이 코드의 변경으로 이어지는 것이 최소화된다. 객체의 필드만 수정하면 대부분이 sql 자동으로 변경됨 JPA와 Native Query에서 테이블 변경이 미치는 영향 변경 사항 JPA (JPQL, @EntityGraph)JPA Native Query (nativeQuery = true)컬럼 추가/삭제✅ 자동 반영 (@Column 매핑 변경)❌ Native Query 수정 필요컬럼 타입 변경✅ 자동 반영 (타입 변경 시 엔티티 수정)❌ Native Query 직접 수정 필요JOIN 관계 변경✅ @OneToMany, @Many.. Spring JPA Hibernate 트랜잭션 @Transactional (read only) if we need atomicity we use trasnactionaland once we use transactional we do not call save so that hibernate track changes and flush at once. but, if we do not need atomicity, we avoid trasnactional becasue using trsnactional burden db Hibernate에서는 어떤 일이 벌어지는가? 명시적 vs 암시적 트랜잭션:@Transactional을 사용하면 명시적으로 트랜잭션의 시작과 끝을 정의할 수 있습니다. 이는 Hibernate의 암시적 트랜잭션 관리보다 더 세밀한 제어를 .. Spring JPA Entity 설정 Entity 생성하기(Domain 생성하기, Table 생성하기)Entity 생성하기 엔티티(Entity)란 JPA에서 데이터베이스 테이블과 매핑되는 클래스를 의미하며, 각 엔티티 객체는 데이터베이스에서 독립적으로 관리되는 레코드(행, row)를 나타냅니다. 자바클래스 중 DB Table과 연결할 클래스를 marking하기 위해서 @Entity을 사용한다. 또한, class명과 DB Table명이 다르다면 Class에 @Table(name="")을 통해서 어떤 테이블과 맵핑할 것인지 명시해줘야한다.@Entity : JPA에서 해당 클래스가 데이터베이스 테이블과 매핑됨을 나타내는 필수 애너테이션@Table(name="테이블명") : 클래스명과 테이블명을 다르게 지정하고 싶은 경우에는 @Table 어노테이.. Spring JPA 개념, 초기설정, Repository 인터페이스 구현 Persistence Framework데이터영속성(Persistence)이란 프로그램이 꺼져도 데이터는 사라지지 않는 것, 즉, 영구저장 DB를 사용하는 데이터를 말함. DB를 다루기 위해 필요한 프레임워크를 Persistence Framework라고 한다. Persistence Framework를 사용하면, DB관련되어 개발자가 공통적으로 작성하는 코드를 대신하여 동작시켜주어, 코드 재사용 및 유지보수에 용이하며 코드가 직관적이다.대표적인 Persistaence Framework 역할1. DB연결관리 : MongoDB, Reddis, Mysql 등에 맞는 코드를 Framework가 대신 동작하여 DB에 종속적이지 않도록 해준다2. DB와의 연결상태에 따른 코드를 Framework가 대신 동작하여 DB의.. 이전 1 다음