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 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;
@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
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.

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

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

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 Hiberrate: use a sintaxe do Hibername Query Language (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 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:

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.

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

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

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:

Voltar

Criar Entidades

Nesta página