본문 바로가기
반응형

분류 전체보기49

자바 ORM 표준 JPA 프로그래밍(10) - 프록시와 연관관계 관리 프록시 엔티티 조회 시 연관된 엔티티들이 항상 사용되는 것이 아님. 프록시를 사용하면 연관된 엔티티를 처음부터 데이터베이스에 조회하는 게 아닌 실제 사용하는 시점에 데이터베이스에서 조회할 수 있음. 자주 함께 사용하는 엔티티들은 조인을 사용해서 함께 사용하는 것이 효과적 JPA는 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)을 둘 다 지원함. EntityManger.find() 이 메소드는 영속성 컨텍스트에 엔티티가 없다면 데이터베이스를 조회한다. 이렇게 조회한 엔티티는 실제 사용하든 사용하지 않든 데이터베이스를 조회하게 된다. EntityManager.getReferance() 이 메소드를 사용하면 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미룬다. 이 메소드가 호.. 2021. 1. 5.
자바 ORM 표준 JPA 프로그래밍(9) - 고급 매핑 상속 관계 매핑 관계형 데이터베이스에는 상속이라는 개념이 없다. 상속과 유사한 슈퍼타입 서브타입 관계(Super-Type Sub-Type relationship)라는 모델이 있다. ORM이 다루는 상속 관계 매핑은 상속 구조와 슈퍼타입 서브타입 관계를 매핑하는 것이다. 데이버테이스에서 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때에 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환: 각각 모두 테이블로 만들고 조회할 때 조인을 사용 → 조인 전략 통합 테이블로 변환: 테이블을 하나만 사용해서 데이터를 통합하여 관리 → 단일 테이블 전략 서브타입 테이블로 변환: 서브 타입마다 하나의 테이블을 만듬 → 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strateg.. 2021. 1. 4.
자바 ORM 표준 JPA 프로그래밍(8) - 다양한 연관관계 매핑 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 다대일 n:1 관계 매핑에 대해서는 앞 포스팅에 다루었기 때문에 이번 포스팅에서는 다루지 않겠음. 일대다 1:n 관계는 n:1 관계의 반대 방향이다. 1:n 관계는 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용해야 한다. 일대다 단방향 @Entity public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id") private Long id; private String name; @OneToMan.. 2021. 1. 3.
자바 ORM 표준 JPA 프로그래밍(7) - 연관관계 매핑 기초 목표 • 객체와 테이블 연관관계의 차이를 이해 • 객체의 참조와 테이블의 외래 키를 매핑 • 용어 이해 • 방향(Direction): 단방향, 양방향 • 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 • 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 목차 • 연관관계가 필요한 이유 • 단방향 연관관계 • 양방향 연관관계와 연관관계의 주인 연관관계 매핑? 객체 연관관계와 테이블 연관관계를 매핑하는 것, 객체의 참조와 테이블의 외래 키를 매핑한다. 핵심 키워드 살펴보기 방향(Direction) : 회원과 팀이 관계가 있을 때 단방향 : 회원 → 팀, 팀 → 회원 둘 중 한 쪽만 참조하는 관계 양방향 : 회원 → 팀, 팀 .. 2020. 12. 28.
자바 ORM 표준 JPA 프로그래밍(6) - 엔티티 매핑 실습 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다 기능 목록 회원 기능 회원등록 회원조회 상품 기능 상품등록 상품수정 상품조회 주문 기능 상품주문 주문내역조회 주문취소 도메인 모델 분석 회원과 주문의 관계: 회원은 여러 번 주문할 수 있다. (1:n) 주문과 상품의 관계: 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수 있다. 주문상품 이라는 모델을 만들어서 다대다 관계를 1:n, m:1 관계로 풀어냄 테이블 설계 엔티티 설계 엔티티 매핑 작성 Member 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Entity @Table(name = "member") @Getter @Setter public cl.. 2020. 12. 27.
자바 ORM 표준 JPA 프로그래밍(5) - 엔티티 매핑 대표적인 매핑 어노테이션 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne,@JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 부름 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 사용 시 주의할 점 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용X 저장할 필드에 final 사용 X @Table @Table은 엔티티와 매핑할 테이블 지정 속성 설명 name: 매핑할 테이블 이름 (default: 엔티티 이름을 사용) catalog: catalog 기능을 가진.. 2020. 12. 25.
자바 ORM 표준 JPA 프로그래밍(4) - 플러시와 준영속 플러시(flush()) 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 변경 감지를 통해 영속성 컨텍스트에 있는 엔티티들과 스냅샷을 비교하여 변경된 부분을 반영한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 날린다. 영속성 컨텍스트를 플러시 하는 방법 em.flush(): 직접 호출 트랜잭션 커밋: 트랜잭션 커밋시에 플러시 실행 JPQL 쿼리 실행: JPQL이나 Criteria 같은 객체지향 쿼리가 호출될 때 플러시 실행 JPQL 쿼리 실행 시 플러시가 자동으로 호출되는 이유 1 2 3 4 5 6 em.persist(memberA); em.persist(memberB); em.persist(memberC); //중간에 JPQL 실행 query = em.createQuery("select m.. 2020. 12. 23.
자바 ORM 표준 JPA 프로그래밍(3) - 영속성 컨텍스트 영속성 컨텍스트 JPA가 제공하는 가장 중요한 두가지 기능 객체와 관계형 데이터베이스 매핑(Object Relational Mapping): 설계 부분 영속성 컨텍스트: 실제 JPA를 통해 데이터베이스와 연동되어 지는 부분 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리 엔티티 매니저를 생성하는 클래스로 생성하는 비용이 크다. 따라서 어플리케이션 전체에서 공유 되도록 설계되어 있다. META-INF/persistence.xml 파일에 있는 설정을 바탕으로 만들어진다. 여러 쓰레드가 동시에 접근해도 안전하다. 엔티티 매니저 엔티티를 관리(저장, 수정, 삭제, 조회 등)하는 관리자 생성하는 비용이 거의 들지 않는다. 여러 스레드가 접근하면 동시성 문제가 발생하므로 스레드 간 공유는 절대 하지 않아.. 2020. 12. 22.
SpringBoot를 활용한 Hibernate 연동 JPA Basic 실습 자바 ORM 표준 JPA 프로그래밍 도서를 통해 학습하였습니다. 책의 예제는 Java Maven 프로젝트를 생성하여 진행하나 필자는 스프링부트 프로젝트를 생성하여 실습하였습니다. pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.1 me.kyeongho jpa-getting-started 0.0.1-SNAPSHOT jpage.. 2020. 12. 21.
반응형