JPA
-
JPA 영속성(persistence)란?JPA 2024. 4. 2. 15:31
영속성이란? 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성을 말한다. 영속성을 갖지 않으면 데이터는 메로리에서만 존재하게 되고 프로그램이 종료되면 해당 데이터는 모두 사라지게 된다. 그래서 우리는 데이터를 파일이나 DB에 영구 저장함으로써 데이터에 영속성을 부여한다. JPA에서의 영속성 JPA의 핵심 내용은 엔티티가 영속성 컨텍스트에 포함되어 있냐 아니냐로 갈린다. JPA의 엔티티 매니저가 활성화된 상태로 트랙잭션 안에서 DB에 데이터를 가져오면 이 데이터는 영속성 컨텐스트가 유지된 상태이다. 이 상태에서 해당 데이터 값을 변경하면 트랙잭션이 끝나는 시점에서 해당 테이블 변경 내용을 반영하게 된다. 따라서 우리는 엔티티 객체의 필드 값만 변경해주면 별도로 update() 쿼리를 날릴 ..
-
03. 영속성 관리JPA 2021. 1. 31. 19:52
JPA가 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 이 장에서는 매핑한 엔티티를 엔티티 매니저를 통해 어떻게 사용하는지 알아보자. 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 이름 그대로 엔티티를 관리하는 관리자다. 개발자 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. 다음은 엔티티 매니저 펙토리를 생성하는 코드다. EntityManagerFactory emf = Persistence..
-
02. JPA 시작JPA 2021. 1. 17. 21:22
1. 객체 매핑 시작 먼저 SQL을 실행해서 예제에서 사용할 회원 테이블을 만들자. 다음으로 애프리케이션에서 사용할 회원 클래스를 만들자. package com.toy.movie.domain.database.member; import javax.persistence.*; @Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME") private String username; private Integer age; //매핑 정보가 없는 필드 public String getId() { return id; } public void setId(String id) ..
-
01-3. JPA란 무엇인가?JPA 2021. 1. 14. 23:56
JPA는 자바 진영의 ORM 기술 표준이다. 애플리케이션과 JDBC 사이에서 동작한다. 그렇다면 ORM이란 무엇인가? 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 데이터베이스에 객체를 저장해준다. jpa.persist(member); //member 객체를 DB에 저장 한다. Member member = jpa.find(memberId); /..
-
01-2. JPA 소개JPA 2020. 12. 29. 23:15
1. 지연 로딩 Member와 Order가 서로 연관 되어있다고 했을 때 Member member = jpa.find(Member.class, memberId); //처음 조회 시점에서 SELECT MEMBER SQL 수행 Order order = member.getOrder(); order.getOrderDate(); //Order를 사용하는 시점에서 SELECT ORDER SQL 수행 위의 코드는 지연 로딩을 사용하는 코드이다. 여기서 마지막 줄의 order.getOrderDate() 같이 실제 Order 객체를 사용하는 시점에 JPA는 데이터베이스에 ORDER 테이블을 조회한다. Member를 사용할 때마다 Order를 함께 사용하면, 이렇게 한 테이블씩 조회하는 것보다는 Member를 조회하는 시..
-
01-1. JPA 소개JPA 2020. 12. 1. 21:52
1.1 SQL을 직접 다룰 때 발생하는 문제점 관계형 데이터베이스는 가장 대중적이고 신뢰할 만한 안전한 데이터 저장소다. 그래서 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소로 사용한다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 데이터베이스에 전달한다. 1.1.1 반복, 반복 그리고 반복 SQL을 직접 다룰 때의 문제점을 알아보기 위해 자바와 관계형 데이터베이스를 사용해서 회원 관리 기능을 개발해보자. 회원 테이블은 이미 만들어져 있다고 가정하고 회원을 CRUD하는 기능을 개발해보자. 1. 회원 객체 만든다, 2. 회원 객체를 데이터베이스에 관리할 목적으로 회원용 DAO를 만든다. 3. 2번에서 ..
-
Pageable 사용하기JPA 2020. 2. 8. 12:13
개요 JPA를 이용해서 Paging API를 만들어 보도록 하겠습니다. 페이징 처리는 거의 모든 웹 개발에서 사용하고 있습니다. 그렇게 복잡하고 어려운 구현은 아니나 실제 쿼리로 작성할 때는 상당히 번거로운 작업이 됩니다. 또 데이터베이스마다 페이징 쿼리가 조금씩 다르다는 점도 복잡도를 높이는 요인 중 하나입니다. Paging이란? DB에 저장된 Entity들을 페이지로 나누는 것이다. 예를들어, DB에 21개의 게시판이 작성되어있다. 프론트에서 "DB에 있는 게시판을 5개씩 분류해서, 두 번째 파트를 줘!" 라고 요청한다. 그러면 백엔드에서는 5개씩 분류하고, 분류된 게시판들의 두 번째 파트를 프론트에게 넘겨준다. 위 상황과 같이, 일정 갯수만큼 분류하고, 분류된 부분들 중 어떤 부분을 보내주는 것이 ..
-
JPA란 무엇인가?JPA 2019. 12. 22. 16:15
JPA(Java Persistent API)와 ORM(Object Relational Mapping) JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미합니다. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 합니다. JPA(Java Persistent API) JPA는 ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA입니다. RDB 테이블은 객체지향적 특징(상속, 다형성, 레퍼런스, 오브젝트 등)이 없고 자바와 같은 언어로 접..