웹 프로그래밍/[ Spring Data JPA ] 4

[ Spring Data JPA ] 03. JPA IN Clause

JPA IN Clause Spring JPA Query에서 사용할 수 있는 IN 절에 대해서 살펴본다. ref : https://javadeveloperzone.com/spring/spring-jpa-query-in-clause-example/ id가 1 또는 2 또는 3인 employee에 대해 select 하는 쿼리이다. 우리는 JPA를 사용하기 위해 List나 Collection으로의 변환이 필요한데, Spring Data JPA는 IN 쿼리를 지원하는 기본 쿼리를 제공하고 있다. 그러면 실제로 어떻게 사용하는지 예시와 함께 보자. 첫 번째 방법은 메서드 이름으로 레코드를 가져오는 것이다. 예약된 이름 규칙으로 메서드를 정의하게 되면 Spring JPA가 런타임시에 자동으로 쿼리를 생성하고 결과를 ..

[ Spring Data JPA ] 02. Transaction Commit은 어디에서 일어날까?

트랜잭션 커밋은 어디에서 일어날까? 레파지토리를 만들 때 Spring-Data-Jpa의 JpaRepository 인터페이스를 상속하였는데, 스프링 데이터에서 기본 구현체를 제공해주기 때문이다. Spring-Data-Jpa에서 제공하는 JpaRepository의 기본 구현체는 SimpleJpaRepository이다. (CrudRepository는 단순히 인터페이스이다.) SimpleJpaRepository의 save()메소드에는 스프링 @Transactional이 붙어있으므로 해당 클래스에 있는 수많은 메소드에 트랜잭션이 걸리게 되고, 메소드 성공적으로 return하게 되면 commit도 이루어지게 되는것이다. @Transactional public S save(S entity) { Assert.notNu..

[ Spring Data JPA ] 01. JpaRepository 사용하기

JpaRepository Spring-Data-Jpa에서는 반복되는 코드없이 쉽게 JPA Repository를 만들 수 있다. extends JpaRespository으로 인터페이스를 상속하고 커스텀이 필요한 메소드는 오버라이딩하면 된다. 스프링의 변경감지는 EntityManger별로 수행한다. 같은 쓰레드에서 Spring-Data가 제공하는 Repository들은 하나의 EntityManager를 공유한다. 그래서 하나의 컨테이너에서 여러 Repository가 사용하는 EntityManager는 동일하다.

[ Spring Data JPA ] 00. Entity와 EntityManager

Entity에 관하여 엔티티 클래스는 테이블과 매핑되어 사용되는 클래스이다. @Entity 어노테이션으로 JPA에게 테이블과 매핑될 클래스이니 관리 할 것임을 알리고 @Table(name = 'product')로 DB와 매핑될 테이블 네임을 지정한다. class name과 table name이 같다면 생략해도 된다. @Column(name = 'id')도 마찬가지로 DB의 컬럼과 매핑될 필드로 name이 같다면 생략해도 된다. ++ 일반적으로 id를 Long타입의 래퍼클래스로 받는 이유? : long값의 경우 기본값으로 0이 데이터베이스에 들어갈 수 있는데, 기존 데이터베이스에도 id가 0값으로 들어있다면 이게 기존데이터인지 추가된 데이터인지 구분이 어렵다. 따라서, Long타입으로 하면 null로 들어..