개발하는 쿠키
article thumbnail
JPA | 15장. 프록시 심화 주제, 성능 최적화
Coding/computer science 2024. 1. 18. 03:29

프록시 심화 주제 영속성 컨텍스트와 프록시 영속성 컨텍스트는 자신이 관리하는 영속 엔티티의 동일성(==)을 보장한다. 그럼 프록시로 조회한 엔티티의 동일성도 보장할까? @Test public void 영속성컨텍스트와_프록시1() { Team team1 = Team.builder() .name("team1") .build(); em.persist(team1); em.flush(); em.clear(); Team refTeam = em.getReference(Team.class, team1.getId()); // 프록시를 이용한 방법 Team findTeam = em.find(Team.class, team1.getId()); // 영속성 컨텍스트 이용한 방법 System.out.println("refTeam..

article thumbnail
JPA에서 Page 기능 사용하기
Coding/computer science 2023. 11. 23. 11:18

👊 시작하기 이번 글을 통해 JPA Page와 Pageable interface 비교해보고, Paging 최적화 방법에 대해 알아보겠습니다. JPA 페이징 API TypedQuery query = em.createQuery("SELECT m FROM Member m ORDER BY m.username DESC", Member.class); query.setFirstResult(10); query.setMaxResults(20); query.getResultList(); JPA 는 페이징을 2개의 API로 추상화합니다. setFirstResult(int startPosition) : 조회 시작 위치(0부터 시작) setMaxResults(int maxResult): 조회할 데이터 수 setFirstResu..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 10. 객체지향 쿼리 언어
Coding/computer science 2023. 11. 16. 12:11

이번 장을 읽으면서 em.find() vs JPQL select 차이와 JPA flush에 대해 정리한다. em.find() vs JPQL select em.find(Member.class, 1L); em.find(Member.class, 1L); 이 코드를 실행하면 데이터베이스에 쿼리가 몇 번 실행될까? 답은 한 번이다. JPA 의 em.find() 를 실행하면 영속성 컨텍스트에 해당 엔티티가 있는지 검사한다. 영속성 컨텍스트에 엔티티가 있으면 그 엔티티를 반환하고, 없으면 데이터베이스에 조회 쿼리를 실행 > 영속성 컨텍스트에 저장 > 반환한다. em.find(Member.class, 1L); em.createQuery("select m from Member m where m.id = 1") .getS..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 09. 값 타입 (+ 값 타입 컬렉션 최적화 방법)
Coding/computer science 2023. 10. 26. 15:47

기본값 타입 값 타입: 식별자가 없고, 숫자 또는 문자 속성만 있다. int, double, Integer, String... 같은 자료형을 값 타입이라고 한다. 임베디드 타입(복합 값 타입) 기존에 있는 값 타입(int, String)이 아니라 새로운 값 타입을 개발자가 직접 정의해서 사용할 수 있다. 이렇게 새롭게 만든 값 타입을 엔티티 클래스 내부에서 사용할 수 있는데 이를 임베디드 타입, 복합 값 타입이라고 한다. 임베디드 타입을 사용하면 엔티티 클래스를 깔끔하게 만들 수 있다. Member 클래스 내부에 (id, name, startDate, endDate, city, street, zipcode)를 모두 쓰지 않고 (id, name, workPeriod, homeAddress) 만 썼다. 그리..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 08. 프록시와 연관관계 관리
Coding/computer science 2023. 10. 19. 16:41

프록시 프록시 객체: 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체다. 프록시 객체를 만들어서 조회하기 위해서는 아래와 같이 사용하면 된다. Member member = em.getReference(Member.class, "member1"); 프록시 클래스는 실제 클래스를 상속받아서 만들어진다. 프록시 객체는 실제 클래스의 참조를 보관하고 있기 때문에 프록시 객체의 메소드를 호출하면 실제 객체의 메소드를 호출하게 된다. 프록시 객체의 특징 - 처음 한 번만 초기화된다. (초기화: 영속성컨텍스트에 DB에서 가져온 엔티티 저장하는 작업) - 영속성 컨텍스트에 이미 찾는 엔티티가 있으면 em.getReference()를 호출해도 실제 엔티티를 반환한다. 프록시 객체는 PK를 보관하고..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 07. 고급 매핑
Coding/computer science 2023. 10. 5. 10:56

이번 장에서는 - 상속 관계 매핑 - @MappedSuperclass - 복합키와 식별 관계 매핑 - 조인 컬럼 vs 조인 테이블 - 엔티티 하나에 여러 테이블 매핑 에 대해 공부한다. 상속 관계 매핑 슈퍼타입-서브타입 논리모델을 실제 테이블로 구현하기 위한 방법 1. 각각의 테이블로 변환: 모두 테이블로 만들고, 테이블끼리 조인하는 전략 2. 통합 테이블로 변환: 단일 테이블만 사용하는 전략 3. 서브타입 테이블로 변환: 서브 클래스마다 테이블을 생성하는 전략 조인 전략 엔티티 각각을 테이블로 만들고 테이블끼리의 조인을 사용해서 조회한다. 슈퍼타입의 DTYPE 컬럼을 이용해서 서브타입 종류를 구분한다. // 슈퍼타입 @Entity @Inheritance(strategy = InheritanceType...

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 06. 다양한 연관관계 매핑
Coding/computer science 2023. 9. 18. 10:54

엔티티의 연관관계를 매핑할 때는 다음을 고려해야 한다. - 다중성 (다대일, 일대다, 일대일, 다대다) - 단방향, 양방향 - 연관관계의 주인: 5장에서 연관관계의 주인인 테이블에서 외래키를 관리할 수 있었다. 관계에서 왼쪽에 있는 엔티티가 연관관계의 주인이다. ex) 다대일 -> 다가 주인 일대다 -> 일이 주인 다대일 다대일 단방향 vs 다대일 양방향 위 그림에서 실선은 연관관계의 주인이고, 점선은 연관관계의 주인이 아니다. Member 가 연관관계의 주인이고, Team 은 연관관계의 주인이 아니다. 다대일 단방향 다대일 단방향은 회원 엔티티에만 매핑 관련 코드를 넣으면 된다. 다대일 양방향도 같은 회원 엔티티를 사용한다. @Entity public class Member { .... @ManyToO..

article thumbnail
자바 ORM 표준 JPA 프로그래밍 | 05. 연관관계 매핑 기초
Coding/computer science 2023. 9. 12. 00:39

단방향 연관관계 회원테이블과 팀 테이블이 있다. 회원은 하나의 팀에만 속할 수 있고, 1개의 팀에는 여러 명의 회원이 있다. Member : Team = 다 : 1 관계이다. Member가 다고, Team이 1이다. 객체 연관관계 회원 객체, 팀 객체는 단방향 관계다. Member.team : Member 객체에서 Team객체는 참조 가능하다. Team.member : Team객체에서 Member객체는 참조할 수 없다. 테이블 연관관계 회원 테이블, 팀 테이블은 양방향 관계다. 회원 테이블의 TEAM_ID로 팀 테이블 조인 가능하다. MEMBER JOIN TEAM, TEAM JOIN MEMBER 가 가능하므로 양방향 관계이다. 객체 연관관계와 테이블 연관관계의 가장 큰 차이 객체는 클래스에 다른 클래스 ..

반응형