Docs Menu
Docs Home
/ /

Realizar operaciones CRUD

En esta guía, aprenderás a usar la Extensión MongoDB para Hibernate ORM para ejecutar operaciones de crear, leer, actualizar y borrar (CRUD) en tus colecciones MongoDB.

Los ejemplos de esta guía utilizan el Movie entidad, que representa la colección sample_mflix.movies de la Conjuntos de datos de muestra del Atlas. La Movie entidad tiene la siguiente definición:

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 a crear una aplicación Java que use la extensión MongoDB para Hibernate ORM para interactuar con esta colección de muestra de MongoDB, consulte Tutorial de introducción.

Importante

Contextos de Persistencia

Para que Hibernate ORM interactúe con la base de datos, debe ejecutar operaciones dentro de un contexto de persistencia mediante Hibernate Session o Jakarta Persistence EntityManager. También debe ejecutar operaciones de escritura dentro de una transacción para modificar los datos de MongoDB y mantener su integridad.

Antes de ejecutar los ejemplos de esta guía, asegúrese de agregar un contexto de persistencia y un código de administración de transacciones a su aplicación que se parezca al siguiente código:

var sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// ... Perform CRUD operations here
tx.commit();
session.close();
sf.close();

Para utilizar una sesión, debes crear un archivo HibernateUtil.java que configure un SessionFactory. Para obtener más información, consulta el paso Configura tu aplicación del tutorial Comenzar.

// 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 usar un,EntityManager debe crear un persistence.xml archivo que declare una unidad de persistencia. Para obtener más información, consulte el Tutorial sobre el uso de las API estándar de JPA. en la documentación de Hibernate ORM.

Cree un documento pasando una instancia de entidad a los siguientes métodos, que insertan el documento correspondiente en su colección:

  • org.hibernate.Session.persist():Utilice la API de Hibernate para aplicar sus cambios a la base de datos

  • jakarta.persistence.EntityManager.persist():Utilice la API de persistencia de Jakarta para aplicar sus cambios a la base de datos

Tip

Para obtener más información sobre cómo crear instancias de entidades y persistirlas en su base de datos, consulte Cómo hacer que las entidades sean persistentes en la guía del usuario de Hibernate ORM.

El siguiente ejemplo crea una nueva instancia de entidad Movie y utiliza el método persist() para insertar un documento correspondiente en la colección 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 de tu colección, proporciona los criterios de tu query al método createQuery(). Las siguientes APIs proporcionan el método createQuery():

  • API Session de Hibernate: utilice la sintaxis del lenguaje de consulta de Hibernate (HQL) para definir sus consultas

  • API EntityManager de Jakarta Persistence: utilice la sintaxis del lenguaje de consulta de Jakarta Persistence (JPQL), un subconjunto de HQL, para definir sus consultas

Tip

Para obtener más información sobre cómo recuperar datos mediante la sintaxis HQL y JPQL, consulte las declaraciones Select en la guía de consultas ORM de Hibernate.

Nota

Esta sección describe cómo leer documentos con HQL y JPQL, pero también puede usar el generador de criterios o consultas nativas para recuperar datos. Para obtener más información, consulte las siguientes guías:

Para recuperar solo un documento que coincida con tus criterios de query, encadena el método getSingleResult() al método createQuery(). El siguiente ejemplo recupera un documento que tiene un valor de title de "Boyhood" de la colección 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

Tip

Sintaxis de consulta

Para obtener más información sobre la sintaxis HQL y JPQL, consulte Una guía para el lenguaje de consulta de Hibernate en la documentación de Hibernate ORM.

El siguiente ejemplo llama al método createQuery() en una sesión para recuperar documentos de la colección sample_mflix.movies. El código usa HQL y JPQL para devolver documentos con un valor year de 1920 e imprime sus 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

Puede realizar las siguientes operaciones para modificar documentos en una colección:

  • Actualizar un documento: llame a los métodos de establecimiento de su entidad para cambiar los valores de campo de una instancia de entidad y luego use una sesión o un administrador de entidades para conservar los cambios.

  • Actualizar documentos múltiples: Pasa una instrucción de actualizar a los métodos createQuery() o createMutationQuery() en una sesión o administrador de entidades. Luego, llama al método executeUpdate() para aplicar tus cambios a la base de datos.

Tip

Para obtener más información sobre cómo modificar datos mediante Hibernate ORM, consulte los siguientes recursos:

El siguiente ejemplo recupera un documento por su valor ObjectId. Luego, el ejemplo llama al método setTitle() de la entidad Movie para actualizar el valor title del documento a "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);

El siguiente ejemplo actualiza el valor title de los documentos coincidentes de "The Three Stooges" a "The 3 Stooges". A continuación, el ejemplo llama al método executeUpdate() para aplicar los cambios a la base de datos:

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

Puede realizar las siguientes operaciones para eliminar documentos de una colección:

  • Eliminar un documento: llame al remove() método en una sesión o administrador de entidades, pasando la instancia de entidad que desea eliminar como argumento.

  • Eliminar varios documentos: Pase una instrucción de eliminación a los createQuery() createMutationQuery() métodos o de un gestor de sesiones o entidades. Luego, llame al executeUpdate() método para aplicar los cambios a la base de datos.

Tip

Para obtener más información sobre cómo eliminar datos mediante Hibernate ORM, consulte los siguientes recursos:

El siguiente ejemplo recupera un documento por su valor ObjectId. Luego, el ejemplo llama al método remove() en una sesión para eliminar el documento correspondiente de la colección 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);

El siguiente ejemplo elimina todos los documentos con un valor year de 1920 de la colección sample_mflix.movies. El ejemplo pasa una instrucción de eliminación al método createMutationQuery() y luego llama al método executeUpdate() para aplicar los cambios a la base de datos:

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 obtener más información sobre cómo realizar operaciones CRUD mediante el ORM de Hibernate, consulte los siguientes recursos:

Para ver más ejemplos de creación, lectura, actualización y eliminación, consulte las siguientes secciones del tutorial Primeros pasos:

Para obtener más información sobre el uso de la extensión ORM de Hibernate para ejecutar consultas, consulte las siguientes guías:

Volver

Entidades

En esta página