분류 전체보기
-
Spring Data JPA - 벌크성 수정 쿼리Spring/Spring Data JPA 2022. 3. 20. 19:46
벌크성 수정 쿼리 벌크성 수정, 삭제 쿼리는 @Modifying 어노테이션을 사용한다 @Modifying 어노테이션을 사용하지 않으면 QueryExcutionRequestException 발생 벌크성 쿼리를 실행한 이후 영속성 컨텍스트 초기화해줘야 한다 @Modifying(clearAutomatically = true), default는 false이므로 설정해줘야 한다. 주의! : 벌크 연산은 영속성 컨텍스트를 무시하고 실행하기 때문에, 영속성 컨텍스트에 있는 엔티티의 상태와 DB에서의 엔티티 상태가 달라질 수 있다. 따라서 꼭 벌크 연산이후 영속성 컨텍스트 초기화 해주자 순수 JPA의 벌크성 수정 쿼리 public int bulkAgePlus(int age) { int resultCount = em.c..
-
Spring Data JPA - 페이징과 정렬Spring/Spring Data JPA 2022. 3. 20. 18:43
페이징과 정렬 순수 JPA 페이징과 정렬 스프링 데이터 JPA 페이징과 정렬 순수 JPA의 페이징과 정렬 public List findByPage(int age, int offset, int limit) { return em.createQuery("select m from Member m where m.age = :age order by m.username desc", Member.class) .setParameter("age", age) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); } public long totalCount(int age) { return em.createQuery("select count(m) from Member..
-
Spring Data JPA - 쿼리 메서드 사용과 @QuerySpring/Spring Data JPA 2022. 3. 19. 20:29
Spring Data JPA에서 제공하는 공통 인터페이스는 우리가 기본적으로 사용하는 CRUD를 제공해준다. 즉, 순수하게 JPA를 이용한 Repository 클래스를 생성하여 CRUD 메서드들을 작성해왔던 번거로운 작업들을 Spring Data JPA에서 제공하는 공통 인터페이스인 JpaRepository를 이용하면 대신 구현 클래스를 생성해줘서 기본적인 CRUD를 작성하지 않아도 된다. JpaRepository의 상속 관계는 다음과 같다. 주요 메서드 메서드 주요 메서드 설명 save(S entity) 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합 void delete(T entity) 엔티티 하나를 삭제한다. EntityManager.remove() 호출 Optional findById(ID i..
-
JPA - Entity 설계시 주의점Spring/JPA 2022. 3. 16. 19:18
Entity 설계 시 주의점 Entity 설계 시 다음과 같은 사항들을 주의해야한다. 엔티티에는 가급적 Seter를 사용 금지 Setter를 무분별하게 사용하게 되면 어디서 해당 값이 변경되었는지 추적하기가 힘들어진다. 즉, 유지보수가 어려워지기 때문에 사용하지 않는 것이 좋다. Setter가 필요할 경우에는 추적하기 쉽도록 메서드를 따로 생성해준다. @Entity @Getter public abstract class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; // Setter 대신 생성해준 메서드 pub..
-
JPA - 설계 순서Spring/JPA 2022. 3. 16. 15:50
김영한님이 추천하는 설계 순서는 다음과 같다. 1. 엔티티 클래스 설계 엔티티 클래스를 설계하고 필요하면 엔티티를 UML로 그린다 2. DB 테이블 설계 엔티티 클래스 설계 단계에서 사실 필요한 DB 테이블의 그림 어느정도 그려진다 여기서 ERD를 그리고 DB 특성에 맞는 PK, FK, INDEX, 제약조건 같은 부분에 초점을 맞춘다. 3. 엔티티 클래스와 DB 테이블 설계를 성능과 제약에 맞추어 양방향으로 조율 엔티티 클래스 객체를 중심으로 설계해도, 현실적으로 DB에 데이터를 넣어야 하므로, 구조적 한계가 있을 수 있다. 성능 때문에 역정규화가 필요할 때도 있다. 이런 부분을 고려해서 엔티티 클래스를 DB에 맞추는 과정을 반복한다.
-
JPA - JPQL 기본 문법 2Spring/JPA 2022. 3. 11. 17:56
기본 문법 2 경로 표현식 용어 특징 탐색 명시적 조인과 묵시적 조인 페치 조인(fetch join) 엔티티 페치 조인 컬렉션 페치 조인 페치 조인과 일반 조인의 차이 페치 조인의 한계 다형성 쿼리 쿼리에 엔티티 직접 사용 벌크 연산 경로 표현식 점( . )을 찍어 객체 그래프를 탐색하는 것을 말한다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 경로 표현식 용어 상태 필드(state filed) : 단순히 값을 저장하기 위한 필드(예시 : m.username) 연관 필드(association field) : 연관관계를 위한 필드 - 단..
-
JPA - JPQL 기본 문법과 기능Spring/JPA 2022. 3. 11. 14:56
JPQL 기본 문법과 기능 JPA가 지원하는 다양한 쿼리 JPQL 기본 문법 집합과 정렬 반환 타입 결과 조회 파라미터 바인딩 프로젝션(SELECT) 프로젝션(SELECT) - 여러 값 조회 페이징 API 조인 ON절을 활용한 조인 서브 쿼리 JPQL 타입 표현 조건식 - CASE JPQL 기본 함수 JPA가 지원하는 다양한 쿼리 JPQL 검색을 할 때 테이블이 아닌 엔티티 객체를 대상으로 검색 필요한 데이터만 DB에서 불러오기 위해 검색 조건이 포함된 SQL SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어(특정 DB SQL에 의존 X) SQL과 유사하며 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL은 엔티티 객체를 대상으로 쿼리를 작성한다. //검색 ..
-
JPA - 값 타입(기본값, 임베디드, 불변 객체, 컬렉션Spring/JPA 2022. 3. 10. 17:49
값 타입 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 JPA의 데이터 타입 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 값 타입 기본값 타입 - 자바 기본 타입(int, double) - 래퍼 클래스(Integer, Long) - String 임베디드 타입 - 복합 값 타입 컬렉션 값 타입 기본값 타입 String, int 등 생명주기를 엔티티에 의존 (예시 : 회원을 삭제하면 이름, 나이 필드도 함께 삭제) 값 타입은 공유하면 안된다.(예시 : 회원 이..