MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Menu Docs
Página inicial do Docs
/ /

Realizar operações CRUD

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 .

Os exemplos nesta aba usam a entidade Movie, que representa a coleção sample_mflix.movies dos conjuntos de dados de amostra do Atlas. A entidade Movie tem a seguinte definição:

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 usa a Extensão MongoDB para Hibernate ORM para interação com esta coleção de amostra do MongoDB, veja o Get Started tutorial.

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 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 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.

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

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

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

  • 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 o executeUpdate() 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:

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

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 declaração de exclusão para os métodos createQuery() ou createMutationQuery() em uma sessão ou gerente de entidades. Em seguida, chame o método executeUpdate() 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:

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

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:

Voltar

Criar Entidades

Nesta página