본문 바로가기

JPA

(9)
JPA 도입을 위한 이해 JPA 개념 Object-Relational Mapping (객체 관계 매핑) 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 JPA 자바 진영의 ORM 기술 표준으로 인터페이스의 모음 즉, 실제로 동작하것이 아니다. JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate JPA 기본 이해 최근에는 Spring Boot 나 Spring Data JPA 처럼 추상화된 기술 기반의 JPA를 사용하기 때문에 실제 JPA가 어떻게 동작하는지 내부 구조나 원리를 이해하기 쉽지않다. JPA 자체를 기본부터 이해하면 문제가 발생했을 때 근본적인 원인을 쉽게 찾을 수 있다. 연관관계 매핑 객체지향 프로그래밍과 관계형 데이터베이스의 차이점의 문제로 ..
[개념] JPA 프로그래밍 - 12. Spring Data JPA 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 CRUD 처리를 위한 공통 인터페이스를 제공 -> 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있음 save(), findOne(), findAll() 등등 일반적은 CRUD메소드는 JpaRepository 인터페이스가 공통으로 제공하므로 개발자가 구현하지 않아도 된다. 스프링 프레임워크와 JPA를 함께 사용한다면 스프링 데이터 JPA 사용을 적극 추천 public interface MemberRepository extends JpaRepository { } 공통 인터페이스 기능 스프링 데이터 JPA는 간단한 CRUD 기능을 공통으로 처리..
[개념] JPA 프로그래밍 - 10. 객체지향 쿼리 언어 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL은 가장 중요한 객체지향 쿼리 언어다. Criteria나 QueryDSL은 결국 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPA를 다루는 개발자라면 JPQL을 필수로 학습해야 한다. 종류 JPQL (Java Persistence Query Language) Criteria 쿼리 : JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스 모음 네이티브 SQL : JPA에서 JPQL대신 직접 SQL을 사용할 수 있다. QueryDSL : Criteria 쿼리처럼 JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음, 비표준 오픈소스 프레임워크다. JDBC직접 사용, MyBatis 같은 SQL..
[개념] JPA 프로그래밍 - 07. 고급매핑 상속 관계 매핑 조인 전략 엔티티 각각을 모두 테이블로 만들고, 자식 테이블이 부모 테이블의 기본키를 받아서 기본키+외래키로 사용하는 전략 주의사항 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없음 따라서 타입을 구분하는 컬럼을 추가해야 한다. (DTYPE 컬럼) @Entity @Inheritance(strategy=IngeritanceType.JOINED) @DiscriminatorColumn(name="DTYPE") public abstract class Item { @Id @GeneratedValue @Column(name="ITEM_ID") private Long id; private String name; private int price; } @Entity @Discriminator..
[개념] JPA 프로그래밍 - 06. 다양한 연관관계 매핑 다대일 다대일 단방향 [N:1] @Entity public class Member { @Id @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; } @Entity public class Team { @Id @Column(name = "TEAM_ID") private String id; private String name; } 회원은 팀을 참조할 수 있지만 반대로 팀에는 회원을 참조하는 필드가 없다. 따라서 회원과 팀은 다대일 단방향 연관관계다. 다대일 양방향 [N:1, 1:N] 양방향은 외래키가 있는 쪽이 연관관계의 주인이다. 일..
[개념] JPA 프로그래밍 - 05. 연관관계 매핑 기초 단방향 연관관계 @ManyToOne 다대일(N : 1) 관계라는 매핑 정보 연관관계를 매핑할 때, 이렇게 다중성을 나타내는 어노테이션 필수 @JoinColumn(name="TEAM_ID") 조인컬럼은 외래키를 매핑할 때 사용 name 속성에 매핑할 외래키 이름 지정 생략 가능 양방향 연관관계 @Entity public class Member { @Id @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; } @Entity public class Team { @Id @Column(name = "TEAM_ID") private Stri..
[개념] JPA 프로그래밍 - 04. 엔티티 매핑 대표적인 매핑 어노케이션 매핑 어노테이션 객체와 테이블 매핑 @Entity, @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column 연관관계 매핑 @ManyToOne, @JoinColumn 필드와 컬럼 매핑 분류 매핑 어노테이션 설명 필드와 컬럼 매핑 @Column 컬럼을 매핑한다. @Enumerated 자바의 enum 타입을 매핑한다. @Temporal 날짜 타입을 매핑한다. @Lob BLOB, CLOB 타입을 매핑한다. @Transient 특정 필드를 데이터베이스에 매핑하지 않는다. (객체에 임시로 어떤 값을 보관하고 싶을 때 사용) 기타 @Access JPA가 엔티티에 접근하는 방식을 지정 @Column 속성 속성 기능 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 ..
[개념] JPA 프로그래밍 - 03. 영속성 관리 영속성 컨텍스트란? JPA를 이해하는 데 가장 중요한 용어 엔티티를 영구 저장하는 환경 여러 엔티티 매니저가 같은 영속성 컨텍스트에 접근할 수도 있음 엔티티 생명주기 비영속 순수한 객체 상태 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없음 영속 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 함 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻 준영속 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됨 삭제 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제 영속성 컨텍스트의 특징 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분하므로 영속 상태는 식별자 값이 반드시 있어야 함 JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장..