JPA

JPA/Spring Data JPA

[Spring Data JPA] 4. @EntityGraph

JPA의 Fetch Join 이해1. EntityGraph를 이해하기 위해서는 JPA의 fetch join에 대해서 이해해야 한다.2. fetch join에 대해서 이해하려면 N + 1 문제를 이해해야 하고,3. N + 1 문제를 이해하기 위해선 FetchType.(Lazy와 Eager)와 Proxy 개념에 대한 이해가 필요하다.차근차근 가보자FetchType.Lazy와 FetchType.EAGERJPA에서 연관관계 매핑을 할 때 @xxxToMany와 @xxxToOne으로 나뉜다.여기서 xxxToMany는 기본적으로 FetchType이 Lazy이다. xxxToMany는 FetchType이 기본적으로 EAGER이다. FetchType은 EAGER와 LAZY로 나뉜다. EAGER LoadingEAGER는 본..

JPA/Spring Data JPA

[Spring Data JPA] 3. 벌크성 수정 쿼리

벌크성 수정 쿼리의 필요성JPA는 데이터를 갖고 와서 데이터가 변경되었는지 확인하는 "Dirty Checking" 작업을 한다. 이것은 한 건 한 건의 데이터들에 대한 수정을 확인한다.하지만 특정 연산에 의하여 몇 개인지 몰라 Dirty Checking이 불가능한 상황에는 어떻게 할까? 예를 들어 나이가 20 보다 적은 회원들을 모두 1살 높여야 하는 상황이라고 해보자.이런 상황에는 나이가 20보다 적은 회원들을 모두 갖고와서 수정하는 것보다, Update Query 한 번 날리는 게 효율적이다.이를 벌크성 수정쿼리라고 한다 순수 JPA에서의 벌크성 수정 쿼리public int bulkAgePlus(int age) {    return em.createQuery("update Member m set m...

JPA/Spring Data JPA

[Spring Data JPA] 2. Spring Data JPA Paging

Spring Data JPA는 데이터베이스의 페이징 처리를 추상화하여 개발자가 쉽게 페이징을 구현할 수 있도록 도와준다. 이는 기존에 데이터베이스마다 다르게 적용되던 페이징 처리 방식을 단순화시킨다.기존 페이징 처리의 어려움과거에는 데이터베이스별로 페이징 처리 방식이 달랐다.예를 들어, MySQL은 LIMIT과 OFFSET을 사용했고, Oracle은 ROWNUM을 사용했다.이러한 방식은 개발자가 직접 계산하고 구현해야 하는 어려움이 있었다.Spring Data Jpa는 이를 공통으로 추상화시켰다.Spring Data Jpa의 페이징 처리Spring Data JPA에서는 Pageable 인터페이스를 사용하여 페이징 처리를 추상화하고 간소화한다. // MemberRepositoryPage findByAge(..

JPA/Spring Data JPA

[Spring Data JPA] 1. QueryMethod

Spring Data JPA의 QueryMethodSpring Data JPA를 사용하면 복잡한 쿼리를 작성하지 않고도, 메소드 이름만으로 데이터 조회를 쉽게 할 수 있다. 이러한 기능을 제공하는 것이 바로 QueryMethod이다. QueryMethod는 메소드 이름을 분석하여 적절한 JPQL 쿼리를 생성한다. 개발을 하며 JPA Repository interface를 상속받아 사용을 한 적이 자주 있다.하지만 SpringDataJpa의 기능은 제대로 써보지 못했다. 그중에 가장 충격적이었던 QueryMethod의 종류들을 작성해보려한다. findByUsername(String username);말 그대로 이름으로 객체를 찾는 쿼리이다. 이렇게 하나의 컬럼으로 찾는 것은 많이 해보았다. 예전에 JPA에..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 12. JPQL 기본 함수 정리

JPA에서의 JPQL과 SQL 사용 이해 Java Persistence API(JPA)를 사용하면서 JPQL(Java Persistence Query Language)과 SQL을 어떻게 활용하는지 이해하는 것은 중요하다.JPQL과 SQL은 각각 다른 접근 방식과 목적을 가지고 있다.JPQL의 기본 구조와 사용 JPQL은 엔티티 객체를 대상으로 쿼리를 작성한다.이는 SQL과 다르게 데이터베이스 테이블이 아닌, 엔티티 클래스에 직접 쿼리를 수행한다. 아래 쿼리는 Member 엔티티에 대해 이름에 'kim'이 포함된 모든 회원을 조회한다.기본 jpql List memberList = em.createQuery("select m From Member m where m.username like '%kim%'", ..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 11. Embadded, 값 타입

JPA의 기본 값 타입에 대한 이해 Java Persistence API(JPA)는 객체 관계 매핑을 통해 데이터베이스와 객체 지향 프로그래밍을 연결한다.JPA에서는 데이터 타입을 크게 엔티티 타입, 값 타입으로 분류한다. 엔티티 타입(Entity Type)엔티티 타입은 데이터베이스의 테이블에 해당하는 클래스이다.각 엔티티 인스턴스는 고유한 식별자(ID)를 가지며, 이 식별자를 통해 데이터가 변경되어도 지속적으로 추적이 가능하다. 값 타입(Value Type)값 타입은 단순한 값을 나타내는 타입으로, Java의 기본 타입(int, double 등)이나 래퍼 클래스(Integer, Long 등), String과 같은 객체이다.값 타입은 고유의 식별자를 가지지 않으며, 그 값 자체로 사용된다. 값 타입의 분..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 10. 프록시와 N + 1 문제 FetchType.LAZY

Lazy 로딩과 Eager 로딩 연관관계 매핑에서 중요한 부분은 엔티티 간의 관계를 어떻게 효율적으로 불러오는가에 대한 전략이다.이는 Lazy 로딩과 Eager 로딩으로 나뉜다. 각각의 상황에 맞는 로딩 전략을 선택하는 것은 애플리케이션의 성능에 큰 영향을 미친다. Lazy 로딩: 연관된 엔티티를 실제로 사용할 때까지 로딩을 지연시키는 방법이다. 이 방법은 메모리 사용량을 최적화하고, 성능을 향상시킬 수 있다. Eager 로딩: 연관된 엔티티를 즉시 로딩하는 방법이다. 필요하지 않은 데이터까지 미리 로딩하기 때문에 성능 저하의 원인이 될 수 있다. Lazy와 Eager 사용 사례Lazy 로딩의 적용Member 엔티티만 필요한 경우, Team 엔티티를 함께 로딩하지 않는 것이 효율적이다. 이는 메모리 사용..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 9.고급매핑 - 상속관계 매핑, @MappedSuperclass

상속관계 매핑관계형 데이터베이스는 상속관계가 존재하지 않는다.객체는 상속관계가 존재한다. DB에 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 조인 전략ITEM에 기본 값들을 두고, DTYPE로 상속받은 객체들을 구별하여 쓰는 방식이다. 단일 테이블 전략한개의 테이블에 모든 컬럼을 추가하여 사용하는 방식이다. 구현 클래스마다 테이블 전략각 클래스마다 테이블을 생성하는 방식이다.   위 방법들은 DB가 상속을 지원하지 않기 때문에, 사용하는 방식이다. 어떠한 방식으로 해도 객체는 그대로하면 된다.JPA는 위 3가지 방식을 모두 지원한다.JPA 기본 전략 자체는 한 테이블 안에 모든 컬럼으로 구성하는 것..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 8.다양한 연관관계 매핑

DB 테이블DB 테이블에는 외래 키 하나로 양쪽에 조인이 가능하다. 저번 글에서 언급했듯이, 방향이라는 개념이 없다.  객체참조용 필드가 있는 쪽으로만 참조가 가능하다.사실, 양방향이라는 개념이 있는 것이 아니라 단방향이 2개 있는 것이다. 사람들이 이해하기 쉽게 양방향으로 설명을 하는 것이지, 객체 입장에선 방향이 1개이다. 연관관계 주인테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.객체 양방향 관계는 참조가 2군데이다.객체 양방향 관계는 참조가 2군데이며 둘 중 테이블의 외래 키를 관리할 곳을 지정해줘야한다.연관관계의 주인: 외래 키를 관리하는 참조주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능함 다대일 [N:1] DB 입장관계형 DB에는 다(N) 쪽에 외래키를 두는 것이 기..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 7. 연관관계 매핑2 양방향 연관관계와 연관관계의 주인

양방향 매핑이전에 Member는 Team을 통해 team의 정보를 얻을 수 있었다.그렇다면 Team에서는 Member로 갈 방법이 없을까?findTeam.getMember() 를 사용할 수 없다. 그러므로 Team에다가 List members를 만들어줘야한다. Team 클래스@Entity@Getter@Setterpublic class Team {    @Id @GeneratedValue    @Column(name = "TEAM_ID")    private Long id;    private String name;    @OneToMany(mappedBy = "team")    private List memberList = new ArrayList();} Team Entity에다가 List members..

토이 개발 스토리
'JPA' 카테고리의 글 목록 (2 Page)