Visão geral
Neste guia, você pode aprender como usar a MongoDB Extension para Hibernate ORM para executar uma query de banco de dados para recuperar documento de uma coleção do MongoDB.
Para fazer uma query nos seus dados do MongoDB, chame o método createQuery() em uma sessão ou em um gerente de entidade. Em seguida, especifique sua query em uma declaração Hibernate linguagem de query (HQL) ou Jakarta Persistence linguagem de query (JPQL).
Recuperar todos os documentos
Para recuperar todos os documentos de uma coleção, passe uma declaração select para o método createQuery(). Nesta declaração, especifique a entidade que representa a coleção que você deseja query.
O exemplo a seguir recupera os valores title de todos os documentos da coleção sample_mflix.movies consultando a entidade Movie:
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);}Recuperar documentos correspondentes
Para recuperar documentos que correspondam a critérios específicos, passe uma declaração de seleção com uma cláusula where para o método createQuery(). Nesta declaração, especifique a entidade que representa a coleção que você deseja query e os critérios correspondentes.
O exemplo a seguir recupera documentos que têm um valor title de "Romeo and Juliet" da coleção sample_mflix.movies:
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
Para recuperar um único documento que corresponda a critérios específicos, encadeie o método getSingleResult() com o método createQuery().
O exemplo a seguir recupera um único documento com um valor title de "Best in Show" da coleção sample_mflix.movies:
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());Importante
Erros de NonUniqueResultException
Se a sua query corresponder a vários documentos, o método getSingleResult() gerará um erro NonUniqueResultException. Para evitar esse erro, certifique-se de que sua query corresponda a apenas um documento ou limite os resultados da query a um documento.
Executar queries de API de critérios
Em vez de usar declarações HQL ou JPQL para criar filtro de queries, é possível usar a API de critérios de persistência de Jakarta para criar queries de tipo seguro programaticamente.
Para criar uma query usando a Criteria API, siga estas etapas:
Crie um objeto
CriteriaBuildera partir de uma sessão ou de um gerenciador de entidade.Crie um objeto
CriteriaQuerydo construtor e especifique a entidade para query.Utilize métodos de query fornecidos pela classe
CriteriaQuerypara especificar seus critérios de query.
Dica
Para saber mais sobre a API de critérios, consulte Utilizando a API de critérios para criar queries na documentação do Jakarta EE.
O exemplo a seguir usa a API de critérios para recuperar todos os documentos que têm um year valor de 1925 da sample_mflix.movies coleção:
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()));Executar queries nativas
Para executar queries do MongoDB que não são atualmente suportadas pela extensão Hibernate ORM, você pode passar sua query como uma declaração MongoDB linguagem de query (MQL) para o método createNativeQuery().
Para aprender como executar queries nativas, consulte o guia Executar Queries Nativas.
Informações adicionais
Para saber mais sobre como executar outras operações em seus dados do MongoDB, consulte o guia Operações CRUD.
Para saber mais sobre como usar HQL e JPQL para executar queries, consulte Um guia para a linguagem de query do Hibernate na documentação do Hibernate ORM.