JPA
-
9. 값 타입 (1)Back-End/JPA 2022. 6. 9. 12:05
JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순한 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 기본값 타입(basic value type), 임베디드 타입(embedded type), 컬렉션 값 타입(collection value type) 3가지로 나눌 수 있다. 값 타입은 식별자가 없고 추적할 수 없는 정보라고 볼 수 있다. 지금부터 값 타입에 대하여 알아보자. 1. 기본값 타입 (Basic Value Type) 예제 코드) @Entity public class Member { @Id @GeneratedValue private Long id; ..
-
7. 고급 매핑Back-End/JPA 2022. 5. 3. 15:50
1. 상속 관계 매핑 관계형 데이터베이스에는 상속이라는 개념이 없다. 대신 객체의 상속 개념과 가장 유사한 슈퍼타입 서브타입 관계라는 모델링 기법을 사용할 수 있다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하기 위한 방법은 3가지가 있다. 1. 각각의 테이블로 변환: JPA에서는 조인 전략이라 한다. 2. 통합 테이블로 변환: JPA에서는 단일 테이블 전략이라 한다. 3. 서브타입 테이블로 변환: JPA에서는 구현 클래스마다 테이블 전략이라 한다. 1.1. 조인 전략 (Joined Strategy) 엔티티 각각을 모두 테이블로 만들고, 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키와 외래 키로 사용하는 전략이다. 예제 코드 @Entity @Inheritance(strateg..
-
5. 연관관계 매핑 기초Back-End/JPA 2022. 4. 23. 17:25
1. 단방향 연관관계 위와 같은 다대일 단방향 연관관계가 있을 때는 2가지의 어노테이션을 통해 다음과 같이 구현이 가능하다. @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private Stirng username; //연관관계 매핑 @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //연관관계 설정 public void setTeam(Team team){ this.team = team; } ... } @Entity public class Team { @Id @Column(name = "TEAM_ID") private String id; private..
-
4. 엔티티 매핑Back-End/JPA 2022. 4. 17. 02:01
데이터베이스 스키마 자동생성 애플리케이션 실행 시점에 데이터베이스 테이블이 자동으로 생성된다. hibernate.hbm2ddl.auto 속성 옵션 설명 개발 환경 추천 전략 create 기존 테이블 삭제 후 새로 생성. drop + create 개발 초기 CI 서버 create-drop 기존 테이블 삭제 후 새로 생성 + 애플리케이션 종료 시 생성한 DDL 삭제. drop + create + drop CI 서버 update 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정한다. 개발 초기 테스트 서버 validate 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. DDL을 수정하지 않는다. 테스트 서버 스테이징 서버 운영 서버 ..
-
3. 영속성 관리Back-End/JPA 2022. 4. 11. 10:24
3-1. 엔티티 매니저 팩토리와 엔티티 매니저 EntityManagerFactory 데이터베이스를 하나만 사용할 경우, 일반적으로 EntityManagerFactory 를 하나만 생성한다. 생성 시, 비용이 아주 많이 든다 → 하나만 만들어서 애플리케이션 전체에서 공유하도록 설계되어 있다. 아래 코드를 통해 생성할 수 있으며, Persistence.createEntityManager(”jpabook”) 호출 시 META-INF/persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 생성한다. EntityManagerFactory emf = Persistence.createEntityManager("jpabook"); → 인자로 “jpabook”을 준 이유는 persis..
-
2. JPA 시작Back-End/JPA 2022. 4. 3. 13:24
데이터베이스 방언 JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. → 데이터베이스를 손쉽게 교체할 수 있다. 방언(Dialect) 이란? 특정 데이터베이스만의 고유한 기능 대부분의 JPA 구현체는 다양한 데이터베이스 방언 클래스를 제공하여 데이터베이스 방언을 처리해준다. 예시 H2: org.hibrenate.dialect.H2Dialect 오라클 10g: org.hibrenate.Oracle10gDialect MySQL: org.hibrenate.MySQL5InnoDBDialect 엔티티 매니저 설정 1. 엔티티 매니저 팩토리 생성 Persistence 클래스를 사용하여 엔티티 매니저 팩토리를 생성 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고, 공유하여 사용해야 한다. Ent..
-
1. JPA 소개 - 패러다임의 불일치Back-End/JPA 2022. 3. 30. 15:29
객체 vs 관계형 데이터베이스 지향하는 목적이 서로 달라서, 둘의 기능과 표현 방법이 다르다. 객체 구조를 테이블 구조에 저장하는 데는 한계가 존재한다. 둘 사이의 패러다임 불일치 문제를 해결하기 위해 개발자는 많은 시간과 코드를 소비하게 된다. 이제, 객체와 관계형 데이터베이스 간의 패러다임의 불일치로 발생하는 문제점 4가지를 살펴보자. 1. 상속 문제점(차이점) 객체에는 상속 개념 존재하지만, 관계형 데이터베이스에는 존재하지 않는다. 객체 저장 시, 부모 객체를 위한 INSERT SQL과 자식 객체를 위한 INSERT SQL을 모두 작성해야 한다. INSERT INTO ITEM ... INSERT INTO ALBUM ... 객체 조회 시, 부모 테이블과 자식 테이블을 조인해서 조회하여야 한다. SEL..