Overview
En este tutorial, aprenderá a crear una aplicación Spring Boot que almacena entidades de la API de persistencia de Java (JPA) en MongoDB mediante la extensión Hibernate ORM. La aplicación define una entidad Movie, un repositorio JPA de Spring Data y una consulta que se ejecuta al inicio.
Antes de comenzar, complete los pasos «Crear una implementación de MongoDB» y «Crear una cadena de conexión» del tutorial «Primeros pasos con la extensión Hibernate ORM». Estos pasos crean la implementación de Atlas, los datos de ejemplo y la cadena de conexión que se utilizan en este tutorial.
Instalar el iniciador de la aplicación
Crear un proyecto Spring Boot
Crea un proyecto Spring Boot 4.x llamado MongoHibernateSpringQuickstart. Puedes generar el proyecto usando Spring Initializr o crearlo en tu IDE.
Spring Initializr genera una clase principal de aplicación con el mismo nombre que tu proyecto, como MongoHibernateSpringQuickstartApplication.java. Si utilizas Spring Initializr para generar tu proyecto, elimina el archivo de la clase principal de aplicación generado automáticamente. Más adelante en este tutorial, crearás un archivo de aplicación principal para este proyecto llamado Movie Application. Si tu proyecto contiene dos clases principales de aplicación, esta no se iniciará y mostrará el error Unable to find a single main class.
Agregue la dependencia de inicio
Para proyectos Maven, agregue la siguiente dependencia a su archivo pom.xml:
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-hibernate-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Para proyectos Gradle, añada la siguiente dependencia a su archivo build.gradle:
dependencies { implementation("org.mongodb:mongodb-hibernate-spring-boot-starter:1.0.0") }
Anular la versión administrada de Hibernate ORM
El iniciador requiere Hibernate ORM 7.4 o posterior. Spring Boot gestiona la versión de Hibernate ORM a través de su lista de materiales (BOM), y algunas versiones de Spring Boot 4.x gestionan una versión anterior de Hibernate ORM a la que requiere el iniciador. Si la versión gestionada es anterior a 7.4, la aplicación no se inicia y la extensión Hibernate ORM genera un error NoSuchMethodError.
Para anular la versión gestionada en un proyecto Maven, agregue la siguiente propiedad a su archivo pom.xml:
<properties> <hibernate.version>7.4.7.Final</hibernate.version> </properties>
Para anular la versión gestionada en un proyecto Gradle, agregue la siguiente línea a su archivo build.gradle:
ext['hibernate.version'] = '7.4.7.Final'
Recarga o sincroniza tu proyecto para completar la instalación.
Configura tu aplicación
Configura las propiedades de tu aplicación
En el directorio src/main/resources de tu proyecto, abre el archivo application.properties y agrega las siguientes propiedades:
spring.jpa.database-platform=MongoDB spring.mongodb.uri=<connection string> spring.jpa.properties.com.mongodb.hibernate.semantics.nulls=MQL
Reemplace el marcador de posición <connection string> con la cadena de conexión sample_mflix que creó en el paso Crear una cadena de conexión del tutorial Introducción a la extensión Hibernate ORM. Su cadena de conexión debería ser similar al siguiente ejemplo:
mongodb+srv://<db_username>:<db_password>@<cluster>/sample_mflix?<options>
Las propiedades de la aplicación que configure hacen lo siguiente:
spring.jpa.database-platform: Activa el iniciador. El iniciador permanece inactivo a menos que establezca esta propiedad enMongoDB.spring.mongodb.uri: Configura la instanciaMongoClientque reutiliza el iniciador. El iniciador no crea un cliente propio.spring.jpa.properties.com.mongodb.hibernate.semantics.nulls: Declara la semántica de comparación nula que utilizan las consultas. Esta propiedad es obligatoria y su único valor admitido esMQL.
Define tu entidad Movie
En el directorio src/main/java/org/example de tu proyecto, crea un archivo llamado Movie.java y pega el siguiente código en él:
package org.example; 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 int year; public Movie() { } public Movie(String title, int year) { this.title = title; this.year = year; } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
Esta entidad representa la colección sample_mflix.movies de los conjuntos de datos de ejemplo de Atlas. El iniciador escanea el paquete principal de su aplicación en busca de entidades, por lo que no necesita registrar la entidad.
Define tu repositorio
En el mismo directorio, crea un archivo llamado MovieRepository.java y pega el siguiente código en él:
package org.example; import org.bson.types.ObjectId; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MovieRepository extends JpaRepository<Movie, ObjectId> { List<Movie> findByTitle(String title); }
El starter habilita los repositorios de Spring Data JPA sin una interfaz SQL DataSource, por lo que Spring Boot implementa la interfaz MovieRepository por usted.
Define tu clase de aplicación
En el mismo directorio, crea un archivo llamado MovieApplication.java y pega el siguiente código en él:
package org.example; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; public class MovieApplication { public static void main(String[] args) { SpringApplication.run(MovieApplication.class, args); } CommandLineRunner run(MovieRepository repository) { return args -> { for (Movie movie : repository.findByTitle("Little Women")) { System.out.println("Title: " + movie.getTitle() + ", Year: " + movie.getYear()); } }; } }
Esta clase ejecuta una consulta al repositorio al iniciar y imprime cada película que coincida.
Una vez completados estos pasos, su aplicación tendrá la siguiente estructura de archivos:
MongoHibernateSpringQuickstart ├── src │ └── main │ ├── java │ │ └── org/example │ │ ├── Movie.java │ │ ├── MovieApplication.java │ │ └── MovieRepository.java │ └── resources │ └── application.properties ├── .gitignore ├── pom.xml (for Maven projects) └── build.gradle (for Gradle projects)
Ejecutar la aplicación
Ejecuta la clase MovieApplication en tu IDE. El resultado se parecerá al siguiente texto:
Title: Little Women, Year: 1949 Title: Little Women, Year: 1994
Si su aplicación no se inicia, consulte la sección Solución de problemas de inicio para obtener información sobre posibles errores de inicio y consejos para la solución de problemas.
Próximos pasos
Para aprender a configurar las propiedades de JPA, cambiar la estrategia de nomenclatura de campos y personalizar MongoClient, consulte Configurar Spring Boot Starter.
Para aprender a modelar sus datos como entidades, consulte Crear entidades para representar colecciones.
Para aprender a consultar sus datos, consulte la sección Interactuar con los datos.