Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Realizar operações CRUD

Neste guia, você pode aprender a usar a extensão MongoDB para Hibernate ORM para executar operações de criação, leitura, atualização e exclusão (CRUD) em suas coleções do MongoDB.

The examples in this guide use the Movie entity, which represents the sample_mflix.movies collection from the Atlas sample datasets. The Movie entity has the following definition:

import com.mongodb.hibernate.annotations.ObjectIdGenerator;
import org.bson.types.ObjectId;
import java.util.List;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private String plot;
private int year;
private List<String> cast;
public Movie(String title, String plot, int year, List<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 List<String> getCast() {
return cast;
}
public void setCast(List<String> cast) {
this.cast = cast;
}
}

Para aprender como criar um aplicativo Java que use a Extensão MongoDB para Hibernate ORM para interagir com essa coleção de amostras do MongoDB, veja o tutorial Get Started.

Importante

Contextos de persistência

Para habilitar o ORM do Hibernate para interagir com o banco de dados, você deve executar operações dentro de um contexto de persistência utilizando um Hibernate 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 aplicativo 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 arquivo HibernateUtil.java que configure um SessionFactory. Para saber mais, veja 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 um EntityManager, você deve criar um arquivo persistence.xml que declara uma unidade de persistência. Para aprender mais, veja o Tutorial usando APIs padrão JPA na documentação do ORM do Hibernate.

Crie um documento passando uma instância de entidade para os seguintes métodos, que inserem o documento correspondente em sua coleção:

  • org.hibernate.Session.persist(): Use a API do Hibernar para aplicar suas alterações no banco de dados

  • jakarta.persistence.EntityManager.persist(): Use a API de Persistência de Jakarta para aplicar suas alterações no banco de dados

Dica

Para aprender mais sobre como criar instâncias de entidade e persisti-las em seu banco de dados, consulte Making entities persistent no guia do usuário do Hibernate ORM.

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(List.of("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(List.of("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);

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 Session do Hibernate: use a sintaxe da linguagem de query do Hibernate (HQL) para definir suas queries

  • API EntityManager do Jakarta Persistence: Use a sintaxe da linguagem de query 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 declarações selecionadas no guia de query ORM do Hibernate.

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 querys nativas para recuperar dados. Para saber mais, consulte os seguintes guias:

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 coleção 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());
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());

Dica

Sintaxe de consulta

Para saber mais sobre a sintaxe HQL e JPQL, consulte Um Guia da linguagem de query do Hibernate na documentação do ORM do Hibernate.

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()));
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()));

Você pode executar as seguintes operações para modificar documentos em uma coleção:

  • Atualizar um documento: Chame 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 gerente 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 o executeUpdate() método para aplicar suas alterações no banco de dados.

Dica

Para aprender mais sobre como modificar dados usando o Hibernate ORM, consulte os seguintes recursos:

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);

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);
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);

Você pode executar as seguintes operações para excluir documentos de uma coleção:

  • 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 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 o executeUpdate() método para aplicar suas alterações no banco de dados.

Dica

Para aprender mais sobre como excluir dados usando o Hibernate ORM, consulte os seguintes recursos:

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);

O exemplo a seguir exclui todos os documentos que têm um valor de year de 1920 da coleção sample_mflix.movies. O exemplo passa uma declaração excluir para o método createMutationQuery() e, em seguida, chama o método executeUpdate() 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);
var deleteResult = entityManager.createQuery(
"delete Movie m where m.year = :y")
.setParameter("y", 1920)
.executeUpdate();
System.out.println("Number of movies deleted: " + deleteResult);

Para saber mais sobre como executar operações CRUD usando o ORM do Hibernate, consulte os seguintes recursos:

Para exibir mais exemplos de criar, ler, atualizar e excluir, consulte as seguintes seções do tutorial de Introdução:

Para aprender mais sobre como usar a extensão Hibernate ORM para executar queries, consulte os seguintes guias: