JPA에서 영속성 컨텍스트란 엔티티를 영구 저장하는 환경을 뜻한다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. EntityManager.persist(entity);영속성 컨텍스트의 변경 내용을 DB에 반영해주는 기능을 한다. 플러시가 발생하면, 변경을 감지하
JPA란 Java Persistence API의 약자이며 자바의 ORM을 위한 표준 기술로, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.ORM 기술이란? ORM
JPA는 SQL을 추상화한 JPQL(Java Persistence Query Language)이라는 객체 지향 쿼리 언어를 제공한다. JPQL은 DB 테이블을 대상으로 쿼리를 작성하는 SQL과는 다르게, Entity 객체를 대상으로 쿼리를 작성한다. 또한 JPQL은 S
application.yml 설정법application.properties 설정법
application.yml 설정 (MySql)
QueryDsl이란 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이다. 복잡한 쿼리와 작성하는 데에 도움을 줄 뿐만 아니라, 쿼리를 자바 코드로 작성할 수 있기 때문에 문법 오류를 컴파일 시점에 잡아낼 수 있다.최신 자바 백엔드 기술은
해당 포스팅에서는 QueryDsl 중급 문법에 대해 정리해 보고자 한다.프로젝션이란 select 대상을 지정하는 것 이다.프로젝션 대상이 하나면 타입을 명확하게 지정 할 수 있다.프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회한다.순수 JPA에서 DTO 타입으로 조
QueryDsl을 사용하려면 구현 코드를 만들어야 하는데 스프링 데이터는 인터페스로 동작하기 때문에 내가 원하는 구현 코드를 넣으려면 사용자 정의 리포지토리라는 조금 복잡한 방법을 사용해야 한다.https://www.inflearn.com/course/quer
스프링 데이터의 페이징 기능(Page, Pageable)을 QueryDsl과 연동하여 사용할 수 있다.searchPageSimple()searchPageComplex()Querydsl이 제공하는 fetchResults() 를 사용하면 내용과 전체 카운트를 한번에 조회할
스프링 데이터는 다음과 같은 상황에서 count 쿼리를 생략한다.1\. 페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때2\. 마지막 페이지 일 때 (offset + 컨텐츠 사이즈를 더해서 전체 사이즈 구함)https://www.inflearn.co
스프링 데이터 JPA는 자신의 정렬(Sort)을 Querydsl의 정렬(OrderSpecifier)로 편리하게 변경하는 기능을 제공한다. 스프링 데이터의 정렬을 Querydsl의 정렬로 직접 전환하는 방법은 다음 코드를 참고하자.참고: 정렬( Sort )은 조건이 조금
스프링 데이터 JPA는 Spring Framework와 JPA라는 기반 위에 JPA를 편리하게 사용할 수 있도록 돕는 기술이다. 스프링 데이터 JPA를 사용하면 Repositoy에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있게 된다. 또한 그동안 반복 개발해
스프링 데이터 JPA가 제공하는 쿼리 메서드 기능을 살펴보자.1\. 메소드 이름으로 쿼리 생성2\. 메소드 이름으로 JPA NamedQuery 호출3\. @Query 어노테이션을 사용해서 리포지토리 인터페이스에 쿼리 직접 정의스프링 데이터 JPA는 메소드 이름을 분석해
이번 포스팅에서는 SpringDataJPA를 이용해서 엔티티 타입이 아닌 단순한 값이나 DTO를 어떻게 조회하는지 알아보고자 한다.DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 한다. 다음과 같이 생성자가 맞는 DTO가 필요하다. (JPA와 사용방식이 동
스프링 데이터 JPA는 유연한 반환 타입을 지원한다.스프링 데이터 JPA 공식 문서https://docs.spring.io/spring-data/jpa/docs/current/reference/html/단건으로 지정한 메서드를 호출하면 스프링 데이터 JPA는
순수 JPA에서 페이징을 구현하는 방법을 알아보자. 다음 조건으로 페이징과 정렬을 사용하는 예제 코드를 보자.검색 조건: 나이가 10살정렬 조건: 이름으로 내림차순페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 3건참조https://www.inflea
이번 포스팅에서는 SpringDataJPA에서 제공하는 페이징과 정렬 기능을 구현해보고자 한다.정렬 기능 : org.springframework.data.domain.Sort페이징 기능 : org.springframework.data.domain.Pageable (내부
JPA는 엔티티를 가져와서 데이터를 변경하면 트랜잭션 커밋 시점에 변경된 부분을 감지하고 DB에 업데이트 쿼리를 날린다. 이런 경우 데이터 한 건에만 적용된다. 이와 반대로 모든 데이터에 업데이트를 적용하는 쿼리를 벌크성 수정 쿼리라고 한다. (ex: 모든 직원의 연봉
EntityGraph가 무엇인지 알아보려면 먼저 JPA의 fetch join 및 지연로딩 개념에 대해서 명확하게 이해를 하고있어야 한다. 먼저 지연로딩 및 fetch join에 대해서 알아보자.현재 member와 team은 지연로딩 관계(FetchType.LAZY)로
SQL에서 Hint를 사용하듯이 JPA에서도 JPA 구현체에 힌트를 전달할 수 있다. 이번 포스팅에서는 JPA의 Hint와 Lock에 대해서 알아보고자 한다.기본적으로 JPA를 이용해 데이터를 조회하게되면 영속성 컨텍스트에 저장되어 관리되고, 그 값을 수정하면 변경 감
스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동으로 생성한다. 만약 인터페이스를 개발자가 직접 구현하려면 구현해야 하는 기능이 너무나도 많다. 만약 특정 메서드만 따로 구현하여 사용하고 싶다면 사용자 정의 리포지토리를 구현하면 된다. 우리
AuditingSpringDataJPA에서는 Auditing이라는 기능을 제공한다. 해당 기능을 사용하여 엔티티가 생성되고, 변경되는 시점을 감지하여 등록일, 수정일, 등록자, 수정자 등을 확인할 수 있다. 기본적으로 테이블을 만들 때 등록일과 수정일은 반드시 남겨놓는
SpringDataJPA에서는 도메인 클래스 컨버터라는 기능을 제공한다. 해당 기능을 사용하면 HTTP 요청은 회원 id를 받지만 도메인 클래스 컨버터가 중간에 동작해서 회원 엔티티 객체로 변환해준다.주의: 도메인 클래스 컨버터로 엔티티를 파라미터로 받으면, 이 엔티티
SpringDataJpa가 제공하는 페이징과 정렬 기능을 Web(스프링 MVC)에서 편리하게 사용할 수 있다.파라미터로 page에 대한 파라미터 정보들이 담긴 Pageable 인터페이스를 받을 수 있다. (실제로는 org.springframework.data.domai