save() 메소드의 구현부save() 메소드의 작동 방식새로운 엔티티인 경우 persist(저장)새로운 엔티티가 아닌 경우 merge(병합)그렇다면 새로운 엔티티 여부를 어떻게 판단할까?📌 새로운 엔티티를 판단하는 기본 전략식별자가 객체인 경우, null로 판단식별
JPA의 모든 변경은 트랜잭션 안에서 동작spring data jpa는 변경(등록,수정,삭제) 메소드를 트랜잭션 처리서비스 계층에서 트랜잭션을 시작하지 않으면 리포지토리에서 트랜잭션 시작(spring data jpa 구현체를 까보면 그 안에 이미 걸려있는 것을 확인 가
spring mvc에서 spring data jpa가 제공하는 페이징&정렬 기능 활용1\. 사용예시controller파라미터로 pageable(인터페이스)를 받으면, 실제는 org.springframework.data.domain.PageRequest 객체가 생성요청
1\. 사용 배경엔티티를 생성/변경할 때 변경한 사람/시간은 꼭 추적이 필요사실상 모든 테이블에 필요한 공통정보(운영시 추적 용이를 위해)📌 등록일, 수정일, 등록자, 수정자2\. spring data jpa 사용 예시스프링부트 설정 클래스@EnableJpaAudit
1\. 사용 배경spring data jpa 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동생성그런데 spring data jpa가 제공하는 인터페이스를 직접 구현하면 구현해야하는 기능이 너무 ㅁ낳음모종의 이유로 인터페이스의 메소드를 직접 구현하고 싶다면?JP
1\. JPA HintJPA 쿼리 힌트(DB에 보내는 SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트)기본적으로 영속성 컨텍스트에 올라온 객체들은 변경감지를 통해 변경사항이 있을 경우 자동 업데이트 쿼리사실상 객체 두개를 관리하는 것(비효율적, 메모리 소모)만약
연관된 엔티티들을 한 번에 조회하는 방법1\. 지연로딩으로 인한 N+1 문제 발생member -> team(LAZY)1(member 조회) + N(member 수만큼 team 조회) 쿼리 실행2\. 연관된 엔티티를 한 번에 조회하기 위해 페치조인 적용JPQL 페치조인그
@Modifying 어노테이션 사용벌크성 수정,삭제 쿼리 이용시 적용사용하지 않을 경우 org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations 예외 발생📌 벌
1\. 페이징/정렬 파라미터org.springframework.data.domain.Sort : 정렬 기능org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함)2\. 특별한 반환 타입org.springframe
spring data jpa는 유연한 반환타입을 지원https://docs.spring.io/spring-data/jpa/docs/current/reference/html/조회 결과가 많거나 없는 경우?컬렉션결과 없음: 빈 컬렉션 반환단건결과 없음: null
단순히 값 하나만 조회하는 경우여러개 값을 DTO로 직접 조회하는 경우주의 📌 DTO로 직접 조회하기 위해서는반드시 "new" 명령어 사용!!! 생성자가 맞는 DTO가 필요DTO 기재할 때 반드시 패키지 경로 전부 작성
메소드에 JPQL 쿼리 바로 작성@Query 어노테이션 적용실행할 메소드에 정적쿼리를 직접 작성(이름 없는 Named 쿼리의 개념)JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류 발견 가능!!!(장점)참고 쿼리 메소드와 비교했을 때, 전자의 경우 파라미터
@NamedQuery 어노테이션으로 Named 쿼리를 정의Spring Data Jpa를 사용해서 Named 쿼리 호출NamedQuery의 최대 장점애플리케이션 실행 시점에 에러가 바로 발생NamedQuery는 정적쿼리이기 때문에 실행 시점에 파싱을 하기 때문참고 실무에
📌 쿼리 메소드 기능 3가지메소드 이름으로 쿼리 생성메소드 이름으로 JPA NamedQuery 호출@Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의1\. 메소드 이름으로 쿼리 생성Spring Data JPA는 메소드 이름을 분석해서 JPQL을
JpaRepository 인터페이스공통 CRUD 제공(대부분의 공통화 가능한 메소드 모두 제공)제네릭은 <엔티티 타입, 식별자 타입>으로 설정공통 인터페이스 구성제네릭 타입T: 엔티티ID: 엔티티의 식별자 타입S: 엔티티와 그 자식 타입주요 메소드save(S) :
1\. JavaConfig 설정 - 스프링부트 사용시 생략 가능@SpringBootApplication 위치를 지정하면, 해당 패키지와 하위 패키지 자동인식만약 위치가 달라질경우 @EnableJpaRepositories 어노테이션 적용2\. 구현 클래스 생성reposi
https://spring.io/projects/spring-data-jpaJPA를 사용할 때 지루하게 반복되는 코드를 자동화Spring Data JPA는 "JPARepository"라는 인터페이스를 제공하는데, 기본적인 CRUD 기능이 모두 제공findByN