Visão geral
Neste guia, você pode aprender a usar a extensão MongoDB para hibernação ORM para executar operações de criação, leitura, atualização e exclusão (CRUD) em suas coleções do MongoDB .
Dados de amostra
Os exemplos nesta aba usam a Movie entidade, que representa a sample_mflix.movies coleção do a partir dos conjuntos de dados de amostra do Atlas. A Movie entidade tem a seguinte definição:
import com.mongodb.hibernate.annotations.ObjectIdGenerator; import org.bson.types.ObjectId; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; public class Movie { private ObjectId id; private String title; private String plot; private int year; private String[] cast; public Movie(String title, String plot, int year, String[] cast) { this.title = title; this.plot = plot; this.year = year; this.cast = cast; } public Movie() { } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPlot() { return plot; } public void setPlot(String plot) { this.plot = plot; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public String[] getCast() { return cast; } public void setCast(String[] cast) { this.cast = cast; } }
Para saber como criar um aplicação Java que usa a extensão MongoDB para hibernação ORM para interagir com essa coleção de amostras do MongoDB , consulte o tutorial de Introdução.
Importante
Contextos de persistência
Para habilitar o ORM do Hibernar para interagir com o banco de dados, você deve executar operações dentro de um contexto de persistência utilizando um Hibername Session ou um Jakarta Persistence EntityManager. Você também deve executar operações de gravação dentro de uma transação para modificar os dados do MongoDB e manter a integridade dos dados.
Antes de executar os exemplos neste guia, adicione o contexto de persistência e o código de gerenciamento de transações ao seu aplicação que se assemelha ao código a seguir:
var sf = HibernateUtil.getSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); // ... Perform CRUD operations here tx.commit(); session.close(); sf.close();
Para utilizar uma sessão, você deve criar um HibernateUtil.java arquivo que configure SessionFactory um. Para saber mais, consulte a etapa Configurar seu aplicativo do tutorial de Introdução.
// Replace <persistence unit> with the name of your persistence unit in the persistence.xml file EntityManagerFactory emf = Persistence.createEntityManagerFactory("<persistence unit>"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); // ... Perform CRUD operations here entityManager.getTransaction().commit(); entityManager.close(); emf.close;
Para utilizar EntityManager um, você deve criar um persistence.xml arquivo que declara uma unidade de persistência. Para saber mais, consulte o Tutorial usando APIs padrão JPA na documentação ORM do Hibernar.
Insira documentos
Para inserir um documento em uma coleção, crie uma nova instância de entidade. Em seguida, você pode passar essa instância como um argumento para os métodos a seguir para salvá-la em sua coleção do MongoDB como um documento:
org.hibernate.Session.persist(): Use a API do Hibernar para aplicar suas alterações no banco de dadosjakarta.persistence.EntityManager.persist(): Use a API de Persistência de Jakarta para aplicar suas alterações no banco de dados
Dica
Para saber mais sobre como criar instâncias de entidade e persisti-las em seu banco de dados,consulte Tornar entidades persistentes no guia do usuário do Hibername ORM.
Exemplo
O exemplo seguinte cria uma nova instância de entidade Movie e utiliza o método persist() para inserir um documento correspondente na coleção sample_mflix.movies:
var myMovie = new Movie(); myMovie.setTitle("Knives Out"); myMovie.setYear(2019); myMovie.setCast(new String[]{"Ana de Armas", "Daniel Craig", "Chris Evans"}); myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " + "unraveling lies as every Thrombey family member becomes a suspect."); session.persist(myMovie);
var myMovie = new Movie(); myMovie.setTitle("Knives Out"); myMovie.setYear(2019); myMovie.setCast(new String[]{"Ana de Armas", "Daniel Craig", "Chris Evans"}); myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " + "unraveling lies as every Thrombey family member becomes a suspect."); entityManager.persist(myMovie);
Ler documentos
Para recuperar documentos da sua coleção, passe seus critérios de query para o método createQuery(). As seguintes APIs fornecem o método createQuery():
API
Sessiondo Hiberrate: use a sintaxe do Hibername Query Language (HQL) para definir suas queriesAPI
EntityManagerdo Jakarta Persistence: Use a sintaxe JPQL (Jakarta Persistence Query Language), um subconjunto do HQL, para definir suas queries
Dica
Para saber mais sobre como recuperar dados usando a sintaxe HQL e JPQL, consulte Instruções selecionadas no guia de consulta ORM do Hibername.
Observação
Esta seção descreve como ler documentos usando HQL e JPQL, mas você também pode usar o construtor de critérios ou queries nativas para recuperar dados. Para saber mais, consulte os seguintes guias:
Exemplo de devolução de um documento
Para recuperar apenas um documento que corresponda aos seus critérios de query, encadeie o método getSingleResult() ao método createQuery(). O exemplo a seguir recupera um documento com um valor title de "Boyhood" da collection sample_mflix.movies:
var singleResult = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Boyhood") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014
var singleResult = entityManager.createQuery("select m from Movie m where m.title = :t", Movie.class) .setParameter("t", "Boyhood") .getSingleResult(); System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014
Dica
Sintaxe de consulta
Para saber mais sobre a sintaxe HQL e JPQL, consulte Um guia para a linguagem de query do Hibernado na documentação do ORM do Hibernado.
Exemplo de devolução de vários documentos
O exemplo seguinte chama o método createQuery() em uma sessão para recuperar documentos da coleção sample_mflix.movies. O código usa HQL e JPQL para retornar documentos que tenham um valor year de 1920 e imprime seus valores title:
var results = session.createQuery("from Movie where year = :y", Movie.class) .setParameter("y", 1920) .getResultList(); results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy One Week The Saphead The Daughter of Dawn
var results = entityManager.createQuery("select m from Movie m where m.year = :y", Movie.class) .setParameter("y", 1920) .getResultList(); results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy One Week The Saphead The Daughter of Dawn
Modificar documentos
Você pode executar as seguintes operações para modificar documentos em uma collection:
Atualizar um documento: Ligue para os métodos de configuração da sua entidade para alterar os valores de campo de uma instância de entidade e, em seguida, use uma sessão ou gerenciador de entidade para persistir suas alterações.
Atualizar vários documentos: Passe uma instrução de atualização para os
createQuery()createMutationQuery()métodos ou em uma sessão ou gerenciador de entidades. Em seguida, chame oexecuteUpdate()método para aplicar suas alterações no banco de dados.
Dica
Para saber mais sobre como modificar dados usando o Hibername ORM, consulte os seguintes recursos:
Modificando o estado gerenciado/persistente no guia do usuário do Hibername ORM
Atualizar declarações no guia de query do Hibernar ORM
Atualizar um exemplo
O exemplo a seguir recupera um documento por seu valor ObjectId. Em seguida, o exemplo chama o método setTitle() da entidade Movie para atualizar o valor de title do documento para "Jurassic Park I":
// Your ObjectId value might differ Movie movieById = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); movieById.setTitle("Jurassic Park I"); session.persist(movieById);
// Your ObjectId value might differ Movie movieById = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); movieById.setTitle("Jurassic Park I"); entityManager.persist(movieById);
Atualizar vários exemplos
O exemplo a seguir atualiza o valor title dos documentos correspondentes de "The Three Stooges" para "The 3 Stooges". Em seguida, o exemplo chama o método executeUpdate() para aplicar as alterações no banco de dados:
var updateResult = session.createMutationQuery( "update Movie set title = :new where title = :old") .setParameter("new", "The 3 Stooges") .setParameter("old", "The Three Stooges") .executeUpdate(); System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2
var updateResult = entityManager.createQuery( "update Movie m set m.title = :new where m.title = :old") .setParameter("new", "The 3 Stooges") .setParameter("old", "The Three Stooges") .executeUpdate(); System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2
Exclua documentos
Você pode executar as seguintes operações para excluir documentos de uma collection:
Excluir um documento: Ligue para o
remove()método em um gerenciador de sessão ou entidade, passando a instância da entidade que você deseja excluir como um argumento.Excluir vários documentos: Passe uma instrução de exclusão para os
createQuery()createMutationQuery()métodos ou em uma sessão ou gerenciador de entidades. Em seguida, chame oexecuteUpdate()método para aplicar suas alterações no banco de dados.
Dica
Para saber mais sobre como excluir dados usando o Hibername ORM, consulte os seguintes recursos:
Excluindo entidades no guia do usuário do Hibernar ORM
Excluir declarações no guia de query do Hibernar ORM
Excluir um exemplo
O exemplo a seguir recupera um documento por seu valor ObjectId. Em seguida, o exemplo chama o método remove() em uma sessão para excluir o documento correspondente da coleção sample_mflix.movies:
// Your ObjectId value might differ Movie movieToDelete = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); session.remove(movieToDelete);
// Your ObjectId value might differ Movie movieToDelete = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d")); entityManager.remove(movieToDelete);
Excluir vários exemplos
O exemplo a seguir exclui todos os documentos que têm um year valor 1920 de sample_mflix.movies . O exemplo passa uma instrução delete para o createMutationQuery() método e, em seguida, chama o executeUpdate() método para aplicar as alterações no banco de dados:
var deleteResult = session.createMutationQuery( "delete Movie where year = :y") .setParameter("y", 1920) .executeUpdate(); System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4
var deleteResult = entityManager.createQuery( "delete Movie m where m.year = :y") .setParameter("y", 1920) .executeUpdate(); System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4
Informações adicionais
Para saber mais sobre como executar operações CRUD usando o ORM do Hibernar, consulte os seguintes recursos:
Contexto de persistência no guia do usuário do Hibername ORM
Tipos de declaração no guia de query do Hibername ORM
Para exibir mais exemplos de criação, leitura, atualização e exclusão, consulte as seguintes seções do tutorial de Introdução:
Para saber mais sobre como usar a extensão Hibername ORM para executar queries, consulte os seguintes guias: