벌크성 수정 쿼리한번의 연산으로 여러 행을 수정하는 쿼리JPA 와 스프링 데이타아 JPA 에서 모두 지원한다.JPA 사용그냥 보고 넘어간다int bulkPriceUp(String stockAmount) { String qlString = "update Product p set p.price = p.price * 1.1 where p.stockAmount < :stockAmount"; return em.createQuery(qlString) .setParameter("stockAmount", stockAmount) .executeUpdate(); }저런식으로 짜는건 싫다Data Jpa 사용@Modifying @Query(value = "update Item i set i.price = i.price *1...
프로젝션이란쿼리에서 특정 필드를 선택하는 과정원하는 데이터만 추출해서 성능 최적화 및 데이터의 가공을 용이하게 함.프로젝션 사용법단일 필드 프로젝션단일 컬럼을 선택시, 해당 타입으로 결과를 반환한다.예제@Test public void selectSingleProjection() { List fetch = qf.selectFrom(item) .select(item.name) .fetch(); System.out.println("fetch = " + fetch); } fetch = [item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, i..
스프링 데이터 JPA 공통 인터페이스JpaRepositoryCRUD 및 추가적인 JPA 관련 기능을 제공하는 인터페이스이다.상속 구조: JpaRepository는 PagingAndSortingRepository와 CrudRepository를 확장합니다.JpaRepository 주요 기능CRUD 기능save(S entity): 엔티티 저장 또는 수정delete(T entity): 엔티티 삭제findOne(ID id): 엔티티 조회findAll(...): 모든 엔티티 조회, 정렬 및 페이징 가능추가 기능getOne(ID id): 엔티티 프록시 조회flush(): JPA 플러시 수행saveAndFlush(T entity): 저장 후 즉시 플러시deleteInBatch(Iterable entities), del..
스프링 데이터 JPA 쿼리 메서드메서드 이름으로 쿼리 생성메서드 이름을 분석하여 JPQL 쿼리로 자동 생성 종류메서드 이름메서드 이름으로 JPA Named Query 호출@Query 어노테이션을 사용레포 인터페이스에 쿼리를 직접 정의함메서드 이름으로public interface ItemRepository extends JpaRepository { List findByName(String name); }@Test void selectSpringDataJpa() { List item = itemRepository.findByName("item1"); System.out.println("item = " + item); }select i1_0.id,i1_0.name,i1_0.price,i1_0.stock_qua..
JPA Named 쿼리쿼리에 이름을 부여하여 사용하는 방식xml , 어노테이션으로 가능하다.예제@NamedQuery( name = "Member.findByName", query = "select m from Member m where m.name = :name" ) public class Member {@Test void testNamedQuery() { List resultList = em .createNamedQuery("Member.findByName", Member.class) .setParameter("name", "상준") .getResultList(); System.out.println("resultList = " + resultList); }select m1_0.id,m1_0.name f..
JPA Named 쿼리쿼리에 이름을 부여하여 사용하는 방식xml , 어노테이션으로 가능하다.예제@NamedQuery( name = "Member.findByName", query = "select m from Member m where m.name = :name" ) public class Member {@Test void testNamedQuery() { List resultList = em .createNamedQuery("Member.findByName", Member.class) .setParameter("name", "상준") .getResultList(); System.out.println("resultList = " + resultList); }select m1_0.id,m1_0.name f..