일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSA
- jvm
- 이스티오
- mysql
- OS
- 스트림
- 자바
- thread
- IntellJ
- redis
- Stream
- JPA
- spring
- 스프링
- gradle
- Java
- 백준
- Collection
- 토비의 스프링
- 쿠버네티스
- Kotlin
- 토비의 스프링 정리
- 보조스트림
- K8s
- SpringBoot
- Real MySQL
- list
- GC
- 자바 ORM 표준 JPA 프로그래밍
- Stack
- Today
- Total
목록자바 ORM 표준 JPA 프로그래밍 (7)
인생을 코딩하다.
7장, 고급 매핑 들어가기 전에.. 상속 관계 매핑 : 객체의 상속 관계를 데이터베이스에 어떻게 매핑하는지 다룬다. @MappedSuperclass : 등록일, 수정일 같이 여러 엔티티에서 공통으로 사용하는 매핑 정보만 상속받고 싶으면 이 기능을 사용하면 된다. 복합 키와 식별 관계 매핑 : 데이터베이스의 식별자가 하나 이상일 때 매핑하는 방법을 다룬다. 그리고 데이터베이스 설계에서 이야기하는 식별 관계와 비식별 관계에 대해서도 다룬다. 조인 테이블 : 테이블은 외래 키 하나로 연관관계를 맺을 수 있지만 연관관계를 관리하는 연결 테이블을 두는 방법도 있다. 여기서는 이 연결테이블을 매핑하는 방법을 다룬다. 엔티티 하나에 여러 테이블 매핑하기 : 보통 엔티티 하나에 테이블 하나를 매핑하지만 엔티티 하나에 ..
6. 다양한 연관관계 매핑 들어가기 전에 연관관계는 사실상 방향이라는 개념이 존재하지 않는다. 외래키 하나로 양쪽을 조인 가능하다. 연관관계의 주인은 항상 '다' 즉 [N] 쪽에 설정해줘야 한다. 참조용 필드(mappedBy)는 읽기 전용으로, 오로지 참조만 가능하다. 객체에서의 양방향은 A->B, B->A 처럼 참조가 2군데인 것이다. 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:N] 1. 다대일[N:1] JPA에서 가장 많이 사용하고, 꼭 알아야 하는 다중성이다. 아래 테이블에서 보면 DB설계상 일대다에서 '다' 쪽에 외래키가 존재해야한다. 그렇지 않으면 잘못된 설계이다. 테이블에서는 FK가 팀을 찾기 위해 존해하고, 객체에서 Team 필드도 Team을 참조하기 위해 존재한다. ..
5. 연관관계 매핑 기초 객체의 참조와 테이블의 외래 키를 매핑할 수 있다. 방향 : 단방향, 양방향 회원 -> 팀 팀 -> 회원 회원 -> 팀, 팀 -> 회원 다중성 다대일, 일대다, 일대일, 다대다 N:1, 1:N, 1:1, N:N 연관관계의 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 단방향 연관 관계 객체 연관관계 객체는 단방향 관계다. 객체의 필드(멤버 변수)로 다른 객체와 연관관계를 맺는다. 테이블 연관관계 양방향 관계다. 테이블은 외래키로 다른 테이블과 연관관계를 맺는다. 두 테이블의 외래키를 통해서 서로 조인 할 수가 있다. 객체 연관관계와 테이블 연관관게의 가장 큰 차이 참조를 통한 연관관계는 언제나 단방향이다. 객체간에 연관관계를 양방향으로 만들고 싶으면 반대쪽..
4. 엔티티 매핑 대표적인 매핑 어노테이션 XML에 기입해도 되지만 어노테이션 방식이 좀 더 쉽고 직관적 객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관관계 매핑 : @ManyToOne, @JoinColumn 4.1 Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스는 JPA가 관리. @Entity 적용시 주의사항 기본 생성자는 필수. (파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다 JPA가 엔티티 객체를 생성할..
3. 영속성 관리 매핑한 엔티티를 엔티티 매니저를 통해 어떻게 사용하는지 JPA가 제공하는 기능 엔티티와 테이블을 매핑하는 설계 부분 매핑한 엔티티를 실제 사용하는 부분 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 어플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성. EntityManagerFactory를 얻기 // 비용이 아주 많이 든다. //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); 만드는 비용이 상당히 큼. 한 개만 만들어서 어플리케이션 전체에서 공유하도록 설계. 여러 스레드가 동시에 접근해도 안전, 서로 다른 스레드 간 공유 가..
2.3 JPA 시작 implementation 'org.springframework.boot:spring-boot-starter-data-jpa spring-boot-starter-aop spring-boot-starter-jdbc HikariCP 커넥션 풀 (부트 2.0 기본) hibernate + JPA: 하이버네이트 + JPA spring-data-jpa: 스프링 데이터 JPA 2.4 객체 매핑 시작 spring: h2: console: enabled: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa jpa: hibernate: ddl-auto: create p..
1.3 JPA란 무엇인가? JPA (Java Persisitence API)는 자바 진영의 ORM 기술 표준. 어플리케이션과 JDBC 사이에서 동작 ORM (Object Relational Mapping) 객체와 관계형 데이터베이스를 매핑한다는 뜻. ORM 프레임워크 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. JPA를 사용해서 객체를 저장하는 코드 jpa.persist(member) JPA를 사용해서 객체를 조회하는 코드 Member member = jpa.find(memberId ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스를 전달해주는 것 뿐 아니라 앞서 다양한 패러다임의 불일치 문제들도 해결해준다. 어떠헤 매핑해야 하는지 매핑 방법만 ORM 프..