반응형
@Modifying 이란?Spring Data JPA에서 사용되는 애노테이션으로, @Query 어노테이션을 통해 작성된 변경이 일어나는 쿼리(INSERT, DELETE, UPDATE )를 실행할 때 사용된다.@Modifying을 변경이 일어나는 쿼리와 함께 사용해야 JPA에서 변경 감지와 관련된 처리를 생략하고 더 효율적인 실행이 가능하다.@Modifying@Query("UPDATE User u SET u.name = :name WHERE u.id = :id")int updateUserName(@Param("id") Long id, @Param("name") String name);▶ @Query, @Param 알아보기 (클릭) 📌 벌크 연산이란?벌크 연산은 데이터베이스에서 UPDATE, DELE..
Fetch Join JPQL에서 성능 최적화를 위해 제공하는 기능으로 연관된 엔티티나 컬렉션들을 한번의 SQL 쿼리로 함께 조회할 수 있다. 연관된 엔티티에 대해 추가적인 쿼리를 실행할 필요 없이 효율적인 로드를 할 수 있는 것이다. 즉, 패치 조인은 성능 최적화에 주로 사용되며, N+1 문제를 해결하는 데 효과적이다. 예를 들어 Order와 Product 엔티티가 있고, 이 둘이 (1 : N) 일대다 연관관계가 있다고 가정해보자. Order 엔티티를 조회하면서 관련된 상품(Product) 엔티티도 한 번의 쿼리로 함께 조회하기 위해 패치 조인을 사용할 수 있다. SELECT o FROM Order o JOIN FETCH o.products 위의 쿼리는 패치 조인을 사용하여 Order 엔티티와 관련된 P..
JPA에서는 연관된 엔티티를 가져오는 방법으로 지연 로딩과 즉시 로딩이 있다. 지연 로딩 지연 로딩은 연관된 엔티티를 사용할 때까지 로딩을 지연하는 방식이다. 지연 로딩을 사용함으로써 연관 엔티티의 데이터를 사용할 필요가 없는 경우, 쿼리 수행과 시간을 절약할 수 있다. @xxToxx(fetch = fetchType.LAZY) 언제 지연로딩을 사용할까? 연관 엔티티를 많이 사용하지 않는 경우 부모 객체를 조회할 때 자식 객체를 따로 조회하지 않고, 자식 객체가 필요한 경우만 로드하여 사용할 때 유용하다. 실제로 필요한 경우에만 연관 엔티티를 사용하는 경우 연관 엔티티가 필요한 경우에만 로딩하여 불필요한 쿼리가 수행되지 않아, 쿼리 수행 시간을 줄일 수 있다. 대용량 데이터 처리 연관된 엔티티를 무조건 로..
JPQL (Java Persistence Query Language)이란 ? JPQL은 엔티티 객체를 대상으로 하는 쿼리 언어이다. JPQL의 문법을 보면 다음과 같다. (나이가 18살 이상인 유저를 조회) select u from User as u where u.age > 18 JPQL은 SQL과 유사한 구문을 사용하는 것을 볼 수 있다. 하지만 살짝 다른 특징을 살펴보면 이렇다. JPQL 문법 특징 엔티티 클래스 이름, 엔티티 필드의 대소문자가 일치해야한다. ( 즉, 유저의 나이를 조회하는데 나이 필드가 age면 Age가 아닌 age로 작성 ) JPQL 키워드는 대소문자 구분하지 않는다. (SELECT, select, From, from) 엔티티 객체를 대상으로 하는 쿼리이므로 엔티티 이름을 사용한다..
임베디드 타입은 엔티티의 일부에 별도의 클래스를 사용하여 구현함으로써, 코드를 더 모듈화하고 재사용성을 높이는 방식이다. 임베디드 타입을 사용함으로써 복잡한 속성 그룹을 분리하고 공통 타입을 다양한 엔티티에서 재사용할 수 있다. 이해하기 쉽게 예시를 통해 알아보자. 임베디드 타입을 사용하는 예시 User 엔티티에 다음과 같은 정보가 있다고 가정해보자. @Entity public class User { @Id @GeneratedValue private Long id; private String username; private String city; private String street; private String zipcode; ... } 여기서 city, street, zipcode는 주소에 해당된다...