JPA 18

7장 고급 매핑

👣 개요 해당 게시물은 OOP와 SQL에서의 간극을 메꾸는 여러 기술을 나열하는 방식으로 서술된다. 아직 OOP와 SQL 사이에 간극이 존재하는데 내용은 다음과 같다. 1. OOP의 상속관계 2. SQL에서의 복합 키 및 식별 관계 👣 상속 관계 매핑 SQL에는 상속 개념이 존재하지 않는다. 대신 슈퍼타입 서브타입 관계라는 개념이 존재한다. 따라서 OOP의 상속은 SQL에서의 슈퍼타입 서브타입 관계로 매핑한다. 위 방법은 3가지의 전략으로 적용할 수 있다. 1. Joined Strategy 2. Single-Table Strategy 3. Table-per-Concrete-Class Strategy Joined Strategy는 부모 테이블[이하 P]을 만들고 해당 테이블에 DTYPE과 같은 자식 테이블..

JPA 2023.08.31

6장 다양한 연관관계 매핑

👣 개요 해당 게시물에서는 '다대일', '일대다', '일대일', '다대다' 의 연관관계를 다룰 예정이었다. 하지만 앞선 5장과 다소 중복이 많기 때문에 '다대다' 관계에 대해서만 다루고 넘어갈 것이다. 👣 다대다 연관관계 마치 쇼핑몰 웹사이트에서의 '회원'과 '상품'의 관계와 같다. 이하, '회원'을 A로 '상품'을 B로 표기한다. A는 여러 개의 B를 소유할 수 있다. 마찬가지로 B는 여러 명의 A에 의해서 주문되어 진다. 안타깝게도 SQL에서는 정규화가 진행된 테이블 2개만으로 이 관계를 정의할 수 없다. 때문에 A와 B 사이에 '주문 테이블'[이하 C]가 추가적으로 필요하다. 이를 통해 A-C 혹은 B-C의 관계를 다시 '다대일'관계로 만들어서 사용할 수 있다. create table MEMBER ..

JPA 2023.08.31

5장 연관관계 매핑 기초

👣 개요 OOP와 SQL 사이의 가장 큰 간극은 '객체의 참조'와 'table 사이의 관계'일 것이다. OOP의 경우, 어떤 한 객체 A가 다른 객체 B를 필드로서 참조하고 있다고 해도 객체 B가 객체 A를 필드로 가지는 것은 아니다. 하지만 SQL의 경우, 어떤 한 테이블 C가 다른 테이블 D를 참조하고 있다면 테이블 D는 테이블 C를 Join 연산으로 참조할 수 있다. 만약 위 상황을 해결하기 위해 객체 A와 객체 B가 서로를 필드로 참조한다 하더라도 또다른 고려사항이 생긴다. OOP의 경우, A와 B가 참조하면 둘 사이는 완전 대칭을 이룬다. 하지만 SQL의 경우, C 혹은 D 둘 중 하나는 FK[외래 키]를 가지고 있어서 완전한 대칭을 이루지는 못한다. 이렇게 OOP와 SQL 사이에는 '참조 방향..

JPA 2023.08.30

4장 엔티티 매핑

👣 개요 해당 게시물은 객체를 엔티티로 선언하기 위해 매핑하는 방법에 대한 내용을 담고 있다. 👣 @Entity JPA가 엔티티로서 사용할 클래스에 추가하는 어노테이션. 해당 클래스는 다음과 같은 조건을 가져야 한다. public or protected의 기본 생성자 final 클래스, Enum, Interface, Inner 클래스가 아닌 클래스 final 필드가 아닌 필드를 가진 클래스 그리고 해당 어노테이션은 다음과 같은 속성을 가진다. name 엔티티 이름을 지정. 기본값은 클래스명이다. 엔티티 이름은 다른 엔티티와 중복되면 안된다. 👣 @Table 엔티티와 매핑할 테이블을 지정한다. 해당 어노테이션은 다음과 같은 속성을 가진다. name 매핑할 테이블 이름. 기본값은 @Entity에서 매핑한 엔..

JPA 2023.08.30

3장 영속성 관리

👣 개요 엔티티 매니저가 엔티티를 어찌 관리하는지에 대한 게시물이다. 👣 Entity Manager Factory & Entity Manager Entity Manager Factory 생성 비용이 아주 크며, 동시성에 강하기 때문에 App 전체에서 보통 1개만 사용한다. META-INF/persistence.xml 내용을 기준으로 생성되며, 필요에 따라 Entity Manager를 만들어 낸다. Entity Manager 비교적 생성 비용이 적다. 다만 동시성 문제에 취약하므로 스레드 사이에 공유는 절대 금물이다. 엔티티 매니저를 취득했다고 해서 DB와의 연결을 수행한 것은 아니다. 예를 들어 트랜잭션을 시작할 때만 DB와 연결을 수행한다고 보면 된다. 👣 영속성 컨텍스트 영속성 컨텍스트는 엔티티 매니..

JPA 2023.08.27

2장 JPA 시작

👣 개요 해당 게시물에선 실제로 JPA를 사용하는 방법에 대해 서술한다. 👣 엔티티 구조 @Entity @Table(name = "member") @Getter @Setter @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name") private String name; } @Entity 이 어노테이션이 적용된 클래스는 테이블과 매핑할 것이라고 JPA에게 선언함. @Table 매핑할 테이블에 대한 정보를 알려준다. 만약 name 속성을 설정하지 않는다면 테이블 이름을 클래스 이름으로 ..

JPA 2023.08.27

1장 JPA 소개

👣 개요 해당 챕터는 JPA의 사용이유, 개선 포인트에 집중하는 부분이다. 👣 기존 문제점 - JDBC 만을 사용할 때의 문제점 JDBC는 Application과 DB 사이를 연결하는 추상화 인터페이스로서 DB 제조업체는 JDBC에서 명시한 API를 기준으로 자바와 연결하는 드라이버를 제작하고 Application 제작자 또한 JDBC에서 명시된 API를 기준으로 DB를 사용한다. 간단한 JDBC를 이용한 DB 통신 방법은 다음과 같다. GitHub - iksadNorth/Lab_JDBC Contribute to iksadNorth/Lab_JDBC development by creating an account on GitHub. github.com 간단하게 코드만 보여준다면 다음과 같이 메서드가 SQL에..

JPA 2023.08.27

'자바 ORM 표준 JPA 프로그래밍' 읽기 전략

👣 개요 해당 책은 Java의 ORM인 JPA에 대한 내용이 담겨 있다. 해당 책은 실용적인 내용을 담고 있기 때문에 직접 코드를 타이핑하며 읽어 나갈 계획이다. 물론 모든 코드를 따라치지는 못할 것이다. 하지만 코드를 따라치면서 그동안 설정하지 못해봤던 것들. [Ex. 트랜잭션 고립 수준, 성능 테스트 등등]을 실험하면서 더 나은 코드를 생산할 수 있도록 공부할 계획이다.

JPA 2023.08.24