Java 관련/JPA: 16개의 글
쿼리 메소드는 스프링 데이터 JPA의 핵심적인 기능중 하나로 메소드 이름으로 쿼리를 생성할 수 있다는 장점이 있다. 메소드 이름으로 쿼리를 생성을 위해 인터페이스에서 사용할 사용자 쿼리 메소드를 정의해 준다. EmailAddress와 LastName의 칼럼을 where 절의 조건으로 질의하는 사용자 쿼리 메소드는 인터페이스에 다음과 같이 선언해 줄 수 있다. public interface UserRepository extends Repository { List findByEmailAddressAndLastname(String emailAddress, String lastname); } 위와 같이 인터페이스에서 먼저 사용자 쿼리 메서드를 정의해준 다음 인터페이스를 구현하는 서비스에서 구체적인 비즈니스 ..
pom.xml에 3.6.3 버전의 Querydsl JPA Support모듈을 추가한다. com.mysema.querydsl querydsl-jpa 3.6.3 com.mysema.querydsl querydsl-apt 3.6.3 provided 이어서 plugin을 추가하는데 빌드시 queryDsl 기반 코드가 생성돼야 하므로 출력 디렉터리 정보를 넣어 두어야한다. com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.mysema.query.apt.jpa.JPAAnnotationProcessor 플러그인을 추가할때 부분에서 에러가 나타날 수 있는데 문제는 다음과 동일. 해결 방법을 참고해 해결해야 한다. 스택오버플..
스프링 데이터 JPA는 스프링프레임워크에서 JPA의 사용을 보다 쉽게 할 수 있도록 도와주는 프로젝트입니다. 스프링 데이터 JPA는 리포지토리 개발시 인터페이스를 상속 하는 것 만으로도 구현 클래스 없이도 데이터 접근을 가능하게 합니다. 보통 CRUD 메소드는 JpaRepository 인터페이스가 공통적으로 제공하는데 findByUserid()와 같은 메소드와 같이 인터페이스에 정의되어 있지 않은 메소드가 있다고 해 보겠습니다. UserRepository.findByUserid() 놀랍게도, 스프링 데이터 JPA는 위 메소드 이름을 분석해 적절한 JPQL 쿼리 문장으로 만들어 줍니다. select m from User u where userid =: userid 이어서 스프링 데이터 설정을 진행하겠습니다..
Pom.xml을 통해 관련 의존성을 추가하고 root-context.xml, servlet-context.xml 파일 설정을 통해 JPA와 스프링프레임워크를 연동합니다. 이어서 컨트롤러, 서비스, 도메인, 레파지토리 단위로 나눠 스프링프레임워크 애플리케이션을 개발합니다. pom.xml 의존성을 추가해 줍니다. 4.0.0 jpabook ch11-jpa-shop 1.0-SNAPSHOT jpa-shop war 1.6 UTF-8 UTF-8 4.1.6.RELEASE 4.3.10.Final 7.0.57 1.4.187 2.2 1.2 3.0.1 1.1.1 1.7.6 4.12 org.springframework spring-webmvc ${spring-framework.version} o..
JPQL JPQL(Java Persistence Query Language)은 JPA를 구현한 프레임워크에서 사용하는 언어입니다. JPA 구현 프레임워크에서는 JPQL을 SQL로 변환해 데이터베이스에 질의하게 됩니다. JPQL은 테이블을 대상으로 쿼리하지 않고 객체를 고려해 쿼리합니다. 이 때문에 JPQL은 데이터베이스 테이블에 직접적인 의존 관계를 맺고 있지 않습니다. JPQL은 SQL과 비슷한 구조로 구성 됐습니다. SELECT ... FROM ... [WHERE ...] [GROUP BY ... [HAVING ...]] [ORDER BY ...] 이때 JQPL DELTE나 UPDATE는 다음과 같은 두개의 쿼리로 나타낼 수 있습니다. DELETE FROM ... [WHERE ...] UPDATE ...
엔티티 매핑 엔티티 맵핑은 JPA에서 제공하는 다양한 맵핑 애노테이션을 이용합니다. 대표적인 애노테이션을 살펴보면 다음과 같습니다. 테이블 맵핑 애플리케이션이 시작 되면 테이블 매핑 애노테이션이 있는 모든 클래스를 대상으로 적합성을 검사합니다. @Entity @Table(name="MEMBER") public class Product{ ... } 테이블 맵핑은 누락 되지 않도록 합니다. 누락 되면 엔티티를 식별할 수 없어 세션 팩토리를 생성할 수 없다는 에러가 발생합니다. Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: jpabook] Unable to build Hibernate SessionFact..
엔티티 매니저 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..
JPA에 기반한 비즈니스로직 중심의 S/W 개발 JPA는 POJO기반의 ORM(Object-Relational Mapping) 프로그래밍을 제공하며, Hibernate와 유사한 ORM 솔루션이다. JPA는 Java Persistence API로 풀 어 쓸 수 있으며, Persistence는 영속성 혹은 지속성이라고 표현할 수 있는데, 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현할 수 있으며, 영속성을 갖지 안는 데이터는 단지 휘발성으로 메모리에만 존재하게 된다. JPA의 환경설정은 '/META-INF/persistence.xml'에 할 수 있다. JPA 필요성 ORM 맵핑에 대한 표준쿼리의 필요성 D..
JPA 요소 엔티티(Entity) 데이터베이스에서 지속적으로 저장된 데이터를 자바 객체에 매핑한 것 메모리 상에 자바 객체의 인스턴스 형태로 존재하며 EntityManager에 의해 데이터베이스의 데이터와 동기화된다. 엔티티 매니저(Entity Manager) 필요에 따라 Entity와 데이터베이스의 데이터를 동기화한다. EntityManager에서 제공하는 Entity 조작 API를 이용해 Entity에 대해 CRUD 작업을 할 수 있다. 영속성 컨텍스트(Persistence context) 영속성 영구적으로 저장하는 환경이다. 엔티티를 저장하거나 검색할 때 엔티티 관리자는 영속성 컨텍스트에서 엔티티를 저장하고 관리한다. 영속성 컨텍스트에 접근하거나 관리를 하려면 엔티티 매니저를 통해야 한다. 엔티티 ..
Entity 객체 생명주기(Lifecycle) New (비 영속 객체) : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. Managed (영속 객체) : Entity 객체가 영속 객체가 된 상황은 크게 2가지가 있다. New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우와 DB 테이블에 저장돼 있는 데이터를 find 메소드 또는 query를 사용해 조회한 경우다. 이 상태는 Persistence Context가 관리하는 상태이며, 해당 객체를 수정했는지(자동 변경 감지) 알아낼 수 있다.Removed (삭제 객체) : Managed 상태인 객체를 remo..