복붙노트

[SPRING] 스프링 데이터의 다중 테이블에서 선택하기

SPRING

스프링 데이터의 다중 테이블에서 선택하기

Spring Data Repository 레이어의 여러 테이블에서 데이터를 가져 오는 select 쿼리를 작성해야합니다. @Query를 사용하여 사용자 지정 쿼리를 작성할 수 있지만 단일 테이블에서만 값을 반환한다는 것을 알고 있습니다.

SELECT s.service_id, s.name, us.rating_id 
FROM services s, 
     ratings r, 
     user_services us
where 
    us.service_id = s.service_id and
    us.rating_id = r.rating_id and
    us.user_id= ?;

해결법

  1. ==============================

    1.인터페이스 메서드는 네이티브 SQL을 사용하여 여러 테이블에서 열을 선택할 수 있으며이 메서드는 개체 배열의 목록을 반환합니다.

    인터페이스 메서드는 네이티브 SQL을 사용하여 여러 테이블에서 열을 선택할 수 있으며이 메서드는 개체 배열의 목록을 반환합니다.

    public interface MyRepository extends JpaRepository {
      @Query(name = [name], nativeQuery = true)
      List<Object[]> methodThatQueriesMultipleTables();
    }
    

    목록의 각 항목은 데이터 행인 객체 배열입니다.

    사용자 지정 저장소 구현을 만들 수도 있습니다.

    스프링 데이터 JPA에 커스텀 메소드를 추가하는 방법

    @NoRepositoryBean
    public interface CustomRepository<[Your object]> {
        List<Object[]> methodThatQueriesMultipleTables();
    }
    
    public class MyRepositoryImpl<[Your object]> implements CustomRepository<[Your object] {
        @PersistenceContext
        private EntityManager entityManager;
    
        @Override
        public List<Object[]> methodThatQueriesMultipleTables() {
            //use JPA query to select columns from different tables
            Query nativeQuery = entityManager.createNativeQuery("query");
            return query.getResultList();
        }
    }
    
  2. from https://stackoverflow.com/questions/24638465/selecting-from-multiple-tables-in-spring-data by cc-by-sa and MIT license