JPA 메소드 키워드

JPA 에서 제공 하는 키워드 정리 Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = 1? Between findByStartDateBetween … where x.startDate between 1? and ?2 LessThan findByAgeLessThan...

스프링에서 JPA 사용 하기(스프링부트, JPA)

이번에는 스프링 프레임워크에서 JPA를 사용 하는 방법에 대해서 정리 해보겠습니다. 스프링 프레임워크 프로젝트에서 스프링 데이터 JPA를 얼마나 효율적이고 간단하게 사용이 가능 한지 기능 별로 살펴 보겠습니다. 스프링 데이터 JPA 개발 환경 구성 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 Maven Eclipse IDE 라이브러리 설정 pom.xml 의존성 추가 <!-- h2 database --> <dependency>...

JPA JPQL 작성의 모든 것!!

JPA 의 EntityManager.find() 기능으로 내가 원하는 검색을 하기에는 어려운 점이 많습니다. 다양한 조회 조건으로 검색을 해야 원하는 결과를 얻을 수 있습니다. 이럴 경우 엔티티 객체를 대상으로 검색을 할 수 있도록 하는 방법이 JPQL(Java persistence Query Language) 입니다. JPQL은 아래와 같은 방법으로 작성 할 수 있습니다. 기능 설명 JPQL   Criteria...

JPA 값타입

값타입 JPA 값 타입에는 JAVA 의 기본 값타입 (int, String)이 있고 사용자가 직접 정의한 임베디드(embedded type) 값 타입과 컬렉션(collection) 값 타입이 있습니다. 오늘은 이 값 타입에 대해서 정리 해보겠습니다. 임베디드(embedded type) 값 타입 임베디드 값 타입 사용(@Embedded) 사용자가 직업 정의한 값 타입을 임베디드(embedded type) 값 타입 이라고 합니다. 회원 정보...

JPA 영속성 전이 (CASCADE) 와 고아 객체(ORPHAN)

영속성 전이 (CASCADE) 란? 영속성 전이 (CASCADE) 란 특정 엔티티를 영속성 상태로 만들때 연관되어진 엔티티도 함께 영속성 상태로 변경 하는 것을 말합니다. 아래 예를 살펴 보겠습니다. Shop shop = new Shop(); shop.setName("JPA마켓"); em.persist(shop); //영속성 상태변경 Shop_Payments payment = new Shop_Payments(); payment.setName("JPA간편페이"); payment.setShop(shop); em.persist(payment); //영속성 상태변경 Shop_Order order = new Shop_Order();...

JPA 연관관계 - 프록시(Proxy)

JPA 프록시(Proxy) 란? JPA 에서는 find() 명령어를 사용하여 조회 할때 항상 데이터베이스를 조회하는 것은 아닙니다. 아래 case1 과 case2를 살펴 보겠습니다. case1 public void findMemberAndTeacher(String id){ Member member = em.find(Member.class, id); Teacher teacher = member.getTeacher(); System.out.println("회원의 강사 : " + teacher.getName()); } case2 public void findMemberAndTeacher(String id){ Member member =...

JPA 연관관계 매핑 - 조인 테이블(@JoinTable)

조인 테이블 데이터베이스 테이블의 연관관계를 설계 하는 방법은 크게 두가지 입니다. 첫 번째는 앞서 복합키 매핑에서 살펴 보았듯이 외래키를 가지고 연관관계를 설계 하는 조인 컬럼 방법과 테이블과 테이블 사이에 별도의 조인 테이블을 만들어 양 테이블간의 연관관계를 설정 하는 방법이 있습니다. 이번 시간에는 조인테이블을 만들어서 테이블간의 연관 관계를 설정하는 방법에 대해서...

JPA 연관관계 매핑 - 복합키 매핑

복합키 매핑 데이터베이스의 테이블을 설계 할때에는 식별관계와 비식별관계 두가지 방법으로 설계를 할 수 있습니다. 식별 관계와 비식별 관계에 대해서 정리 해보도록 하겠습니다. 식별관계와 비식별관계 식별관계 식별관계 매핑은 부모테이블의 키를 자식테이블이 내려 받아서 기본키 + 외래키 형태로 사용 하는 매핑 방식 입니다. 부모의 키가 자식 테이블로 상속 되면서 테이블의 키가 많아지는...

JPA 연관관계 매핑 - 상속관계 매핑 전략

상속관계 매핑 전략 이번시간 에는 JPA 연관관계 매핑의 상속관계 매핑 전략 대해서 정리 해보도록 하겠습니다. @Inheritance : JPA 연관관계 매핑의 상속 관계에서 전략을 지정하는 어노테이션입니다.. @Inheritance 전략 옵션 정보 Enum TYPE 전략 정보 InheritanceType.JOINED 조인전략 자식 테이블이 부모의 키를 받아서 외래키로 사용하는 전략 InheritanceType.SINGLE_TABLE 단일테이블전략 단일 테이블에 부모 자식 데이터가...

JPA 연관관계 매핑 - 양방향매핑

JPA 연관관계 매핑 JPA 연관관계 매핑 - 단방향매핑 에서 JPA의 방향성에 대해서 알아보았다. 이번에는 회원관리 엔티티를 이용 하여 양방향 매핑에 대해서 알아보자. 양방향 매핑 회원 엔티티의 속성은 아래와 같다. 회원은 한명의 강사에 소속되어 있다. 회원과 강사는 다대일(N:1) 관계이다. 강사 엔티티의 속성은 아래와 같다. 강사는 여러명의 회원이 등록 되어 있다. 강사와...

JPA 연관관계 매핑 - 단방향매핑(@ManyToOne, @OneToMany, @OneToOne)

JPA 연관관계 매핑 엔티티들은 어떠한 키를 기준으로 여러 엔티티와 연관 관계를 가지고 있다. JPA 의 객체 관계 매핑은 이해 하지 못하면 매우 어렵다. JPA 에서의 연관관계는 크게 아래와 같다. 1) 방향성(Direction) 단방향 : 회원정보 -> 강사 또는 강사 -> 회원정보 중 한 쪽만 참조되는 경우 양방향 : 회원정보 -> 강사,...

JPA 영속성(persistence context)

JPA 영속성(persistence context) 영속성 컨텍스트는 엔티티를 영구적으로 저장하는 환경이라는 뜻으로 엔티티 매니저는 엔티티를 저장하거나 조회 할때 이 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 논리적인 개념이기 때문에 해당 부분을 이해하지 않으면 데이터를 저장을 했는데 저장이 안되거나 하는 경험을 하게 된다. 영속성 컨텍스트에 대해 하나씩 알아보자. 1. 엔티티 매니저 팩토리(EntityManagerFactory)와 엔티티...

JPA 환경 구성 및 회원 기능 구현

Eclipse, H2 DataBase 설치 JPA 테스트를 하기 위해서 이클립스와 H2 database 를 설치 하자. Eclipse 설치(or intellij) 다운로드 경로 : https://www.eclipse.org/downloads/ H2 DataBase H2 Database 는 자바로 작성되어 별도의 설치 과정이 없고 2M 이하의 매우 가벼운 데이터 베이스이기 때문에 간단한 프로젝트를 개발 할때 매우 유용하다. 다운로드 경로 : https://www.h2database.com/html/download.html 설치...

JPA (JAVA PERSISTENCE API) 란?

JPA (Java Persistent API)란? 자바 어플리케이션을 개발을 하면서 JDBC + myBatis 를 이용한 개발을 주로 다루었다. xml 에 쿼리를 작성 하고 entity 로 맵핑을 하고 메서드에서 객체를 가지고 로직을 구현 하는 것에 대부분의 개발 시간을 소요 하게 되었고 테이블이나 쿼리에 수정사항이 발생하면 xml에서 부터 메서드 까지 모든 부분을 수정 해야...