개요
이 가이드 에서는 최대 절전 모드용 MongoDB 확장 ORM을 사용하여 데이터베이스 쿼리 실행 하여 MongoDB 컬렉션 에서 문서를 조회 방법을 학습 수 있습니다.
MongoDB 데이터를 쿼리 하려면 세션 또는 엔터티 관리자에서 createQuery() 메서드를 호출합니다. 그런 다음 하이버네이트 쿼리 언어(HQL) 또는 자카르타 지속성 쿼리 언어(JPQL) 성명서 에서 쿼리 지정합니다.
모든 문서 검색
컬렉션 에서 모든 문서를 조회 하려면 createQuery() 메서드에 선택 성명서 전달합니다. 이 성명서 에서 쿼리 하려는 컬렉션 나타내는 엔터티를 지정합니다.
다음 예시 Movie 엔티티를 쿼리하여 sample_mflix.movies 컬렉션 에서 모든 문서의 title 값의 조회를 수행합니다.
var allDocs = session.createQuery("select title from Movie", String.class) .getResultList(); for (var t : allDocs) { System.out.println("Title: " + t); }
var allDocs = entityManager.createQuery("select m.title from Movie m", String.class) .getResultList(); for (var t : allDocs) { System.out.println("Title: " + t); }
일치하는 문서 조회
특정 기준과 일치하는 문서를 조회 하려면 where 절이 있는 선택 성명서 createQuery() 메서드에 전달합니다. 이 성명서 에서 쿼리 하려는 컬렉션 나타내는 엔터티와 일치 기준을 지정합니다.
다음 예시 sample_mflix.movies 컬렉션 에서 title 값이 "Romeo and Juliet" 인 문서를 조회합니다.
var matchingDocs = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Romeo and Juliet") .getResultList(); for (var m : matchingDocs) { System.out.println("Title: " + m.getTitle() + ", Year: " + m.getYear()); }
var matchingDocs = entityManager.createQuery("select m from Movie m where m.title = :t", Movie.class) .setParameter("t", "Romeo and Juliet") .getResultList(); for (var m : matchingDocs) { System.out.println("Title: " + m.getTitle() + ", Year: " + m.getYear()); }
Retrieve One Document
특정 기준과 일치하는 단일 문서 조회 하려면 getSingleResult() 메서드를 createQuery() 메서드에 연결합니다.
다음 예시 sample_mflix.movies 컬렉션 에서 title 값이 "Best in Show" 인 단일 문서 조회합니다.
var singleResult = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Best in Show") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
var singleResult = entityManager.createQuery("select m from Movie m where m.title = :t", Movie.class) .setParameter("t", "Best in Show") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
중요
NonUniqueResultException 오류
쿼리 여러 문서와 일치하는 경우 getSingleResult() 메서드에서 NonUniqueResultException 오류가 발생합니다. 이 오류를 방지하려면 쿼리 하나 문서 와만 일치하는지 확인하거나 쿼리 결과를 하나 문서로 제한합니다.
기준 API 쿼리 실행
HQL 또는 JPQL 문을 사용하여 쿼리 필터를 만드는 대신 자카르타 지속성 기준 API 사용하여 프로그래밍 방식으로 유형이 안전한 쿼리를 빌드 수 있습니다.
Criteria API(기준 API 사용하여 쿼리 만들려면 다음 단계를 완료하세요.
세션 또는 엔터티 관리자에서
CriteriaBuilder객체 만듭니다.빌더에서
CriteriaQuery객체 만들고 쿼리 할 엔터티를 지정합니다.CriteriaQuery클래스에서 제공하는 쿼리 메서드를 사용하여 쿼리 기준을 지정합니다.
팁
기준 API 에 대해 자세히 학습하려면 자카르타 EE 문서에서 기준 API 사용하여 쿼리 만들기 를 참조하세요.
다음 예시 Criteria API 사용하여 sample_mflix.movies 컬렉션 에서 year 값이 1925 인 모든 문서를 조회 .
CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery<Movie> cq = cb.createQuery(Movie.class); Root<Movie> movieRoot = cq.from(Movie.class); cq.select(movieRoot).where(cb.equal(movieRoot.get("year"), 1925)); session.createQuery(cq).getResultList() .forEach(m -> System.out.println(m.getTitle()));
CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Movie> cq = cb.createQuery(Movie.class); Root<Movie> movieRoot = cq.from(Movie.class); cq.select(movieRoot).where(cb.equal(movieRoot.get("year"), 1925)); entityManager.createQuery(cq).getResultList() .forEach(m -> System.out.println(m.getTitle()));
네이티브 쿼리 실행
현재 하이버네이트 ORM 확장에서 지원하지 않는 MongoDB 쿼리를 실행 하려면 쿼리 MongoDB 쿼리 언어(MQL) 성명서 으로 createNativeQuery() 메서드에 전달하면 됩니다.
네이티브 쿼리를 실행 방법을 학습 네이티브 쿼리 수행 가이드 참조하세요.
추가 정보
MongoDB 데이터에서 다른 작업을 수행하는 방법에 대해 자세히 학습 CRUD 작업 수행 가이드 참조하세요.
HQL 및 JPQL을 사용하여 쿼리를 실행 방법에 대해 자세히 학습하려면 하이버네이트 ORM 문서에서 하이버네이트 쿼리 언어 가이드 를 참조하세요.