JPA: 42개의 글
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/GSZYN/btrlmnOMFNF/Xwi6RHjrGgXKIPWWdVH101/img.png)
엔티티 매니저 JPA의 기능 대부분을 EntityManager가 제공하고 있습니다. 엔티티 매니저를 통해 데이터베이스의 기본 동작인 CRUD(Create, Read, Update, Delete)를 제공합니다. 엔티티 매니저는 다음과 같은 형태로 선언해 사용합니다. // Use persistence.xml configuration EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1") EntityManager em = emf.createEntityManager(); // Retrieve an application managed entity manager // Work with the EM em.close(); ... emf..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/lztZf/btrlgTOgKFj/XKSFQEmi3ZntFTN5wxeZ61/img.png)
JPA에 기반한 비즈니스로직 중심의 S/W 개발 JPA는 POJO기반의 ORM(Object-Relational Mapping) 프로그래밍을 제공하며, Hibernate와 유사한 ORM 솔루션이다. JPA는 Java Persistence API로 풀 어 쓸 수 있으며, Persistence는 영속성 혹은 지속성이라고 표현할 수 있는데, 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현할 수 있으며, 영속성을 갖지 안는 데이터는 단지 휘발성으로 메모리에만 존재하게 된다. JPA의 환경설정은 '/META-INF/persistence.xml'에 할 수 있다. JPA 필요성 ORM 맵핑에 대한 표준쿼리의 필요성 D..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/b3V1h9/btrjNb9oUmD/BSFjRtfzNdO9w0BpUCb0Dk/img.png)
김영한님이 강의하신 실전! Querydsl 강좌를 학습하고 정리한 내용입니다. 소스코드는 Github를 참고해주세요. 시작하기에 앞서 테스트용 MySQL 설치 및 Gradle 프로젝트에서 Querydsl 설정하는 방법에 대해 알아봅니다. Docker MySQL 설치 docker run -d --name test_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin007! mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci Gradle에서 Querydsl 설정 build.gradle 파일에 querydsl 설정을 추가한다. 설정을 추가하고 build 또는 compileQuerydsl을 ..
ObjectMapperUtils.java package com.wemakeprice.sticker.util; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; public class ModelMapperUtil { private static final ModelMapper modelMapper; /** * Model mapper property setting are specified in the following block. * Defaul..
Spring data JPA Querydsl 기능 중에 리포지토리 지원하는QuerydslRepositorySupport을 통해 좀 더 편리한 기능을 사용하고자 합니다. 방법 1. Repository를 방식처럼 JpaRepository을 상속 받는 인터페이스를 만듭니다. 예시 코드 // 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 (MemberRepositoryCustom) public interface MemberRepository extends JpaRepository, MemberRepositoryCustom { List findByUsername(String username); } 2. MemberRepository를 만든다 (여기서는 MemberRepositoryCustom) - 이 인..
QueryDsl이란? JPQL의 빌더(Criteria)클래스 QueryDsl 사용전 설정 dependency 추가 dependencies { compile("com.querydsl:querydsl-core:4.2.1") compile("com.querydsl:querydsl-apt:4.2.1") compile("com.querydsl:querydsl-jpa:4.2.1") compile("com.querydsl:querydsl-collections:4.2.1") ... } Q클래스를 먼저 생성 후 컴파일 되어야 하므로 task를 먼저 실행시켜야함 def queryDslOutput = file("src-gen/main/java") sourceSets { main { java { srcDir "src-gen/..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/AF9mm/btrgB2W63nb/kgdXvXGWiKfZ40DX0pAfe1/img.png)
Spring Data 란? Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services. This is an umbrella project which contains many subprojec..
JPA 요소 엔티티(Entity) 데이터베이스에서 지속적으로 저장된 데이터를 자바 객체에 매핑한 것 메모리 상에 자바 객체의 인스턴스 형태로 존재하며 EntityManager에 의해 데이터베이스의 데이터와 동기화된다. 엔티티 매니저(Entity Manager) 필요에 따라 Entity와 데이터베이스의 데이터를 동기화한다. EntityManager에서 제공하는 Entity 조작 API를 이용해 Entity에 대해 CRUD 작업을 할 수 있다. 영속성 컨텍스트(Persistence context) 영속성 영구적으로 저장하는 환경이다. 엔티티를 저장하거나 검색할 때 엔티티 관리자는 영속성 컨텍스트에서 엔티티를 저장하고 관리한다. 영속성 컨텍스트에 접근하거나 관리를 하려면 엔티티 매니저를 통해야 한다. 엔티티 ..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/Bu1xs/btq2LlPWCJj/LNVXbt1rzysEk8om67pK90/img.jpg)
오늘 포스팅할 내용은 간단히 JPA의 cascade 기능이다. 이전 포스팅 중에 해당 내용에 대해 포스팅한적이 있지만 조금 부족한 것같아서 다시 한번 정리할겸 글을 남긴다. 영속성 전이(cascade)란 쉽게 말해 부모 엔티티가 영속화될때, 자식 엔티티도 같이 영속화되고 부모 엔티티가 삭제 될때, 자식 엔티티도 삭제되는 등 부모의 영속성 상태가 전이되는 것을 이야기한다. 영속성전이의 종류로는 ALL, PERSIST, DETACH, REFRESH, MERGE, REMOVE등이 있다. 이름만 봐도 어디까지 영속성이 전이되는지 확 눈에 보일 것이다. 여기서는 별도로 각각을 설명하지는 않는다. 오늘의 상황 : A와 B라는 엔티티가 존재하고, 두 엔티티의 관계는 @ManyToMany 관계이다. 이 관계는 중간에 ..
![](http://i1.daumcdn.net/thumb/C200x150/?fname=https://blog.kakaocdn.net/dn/sIqsc/btq2Nc5si3e/BpWkwRk1GqsKe4O3IWLjq1/img.jpg)
JPA - 영속성 컨텍스트와 JPQL 쿼리 후 영속 상태인 것과 아닌것 -JPQL의 조회 대상은 엔티티, 임베디드 타입, 값 타입 같이 다양하다. 하지만 엔티티를 조회하면 영속성 컨텍스트에 관리되지만 나머지는 관리되지 않는다. 예를 들어 임베디드 타입만 참조해서 조회했을 경우에 값을 변경해서 플러시 시점에 반영되지 않는다. 하지만 엔티티를 조회하여 엔티티가 가지고 있는 임베디드타입을 변경했을 경우에는 플러시 시점에 변경이 반영이 된다. JPQL로 조회한 엔티티와 영속성 컨텍스트 -JPQL로 데이터베이스에서 조회한 엔티티가 영속성 컨텍스트에 이미 있으면 JPQL로 데이터베이스에서 조회한 결과를 버리고 대신에 영속성 컨텍스트에 있던 엔티티를 반환한다. 이때 식별자 값을 이용하여 비교한다. 여기서 동일하다는 ..