对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Hibernate ORM 扩展入门

Hibernate ORM 使您能够使用Java对象执行数据库操作,并且您可以使用适用于 Hibernate ORM 的MongoDB扩展来简化应用程序与MongoDB数据的交互。本指南介绍如何安装 Hibernate ORM 扩展、设立 MongoDB 部署以及创建定义映射到 MongoDB 集合的类的 Java 应用程序。

提示

MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。

1

在开始开发之前,请确保本地计算机上安装了以下依赖项:

注意

本教程介绍如何在 IDE 中使用 Maven 或 Gradle 创建应用程序。如果不使用 IDE,请参阅构建 Maven创建新的 Gradle 构建,学习了解如何设立项目。

2

在 IDE 中,创建一个名为 MongoHibernateQuickstart 的新 Maven 或 Gradle项目。对于 Maven 项目,请将以下依赖项添加到 pom.xml文件中:

<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-hibernate</artifactId>
<version>1.0.0-alpha0</version>
</dependency>
</dependencies>

对于 Gradle 项目,请将以下依赖项添加到您的 build.gradle文件中:

dependencies {
implementation("org.mongodb:mongodb-hibernate:1.0.0-alpha0")
}

在 IDE 中,确保重新加载或同步项目以完成 Hibernate ORM 扩展安装。

完成这些步骤后,您已安装 Hibernate ORM 扩展,并在 IDE 中设立新的 Maven 或 Gradle项目。

您可以在 MongoDB Atlas 上创建一个免费套餐 MongoDB 部署来存储和管理您的数据。MongoDB Atlas 在云端托管和管理您的 MongoDB 数据库。

1

完成MongoDB入门指南,设立新的Atlas帐户并将示例数据加载到新的免费套餐MongoDB 部署。按照Cloud Deployment (部署)标签页中的说明在云中创建MongoDB Atlas部署。

2

创建数据库用户后,将该用户的数据库用户名和数据库保存到安全位置,以便在下一步中使用。

完成这些步骤后,您就在 Atlas 上有了一个新的免费套餐 MongoDB 部署、数据库用户档案以及加载到数据库中的示例数据。

您可以通过提供连接 URI(也称为连接字符串)来连接到 MongoDB 部署,它指示驱动程序如何连接到 MongoDB 部署以及连接时的行为方式。

连接字符串包含部署的主机名或 IP 地址和端口、身份验证机制、用户档案(如果适用)以及连接选项。

1

要检索您在上一步中创建的部署的连接字符串,日志您的Atlas帐户并导航到Clusters 部分。单击新部署的Connect 按钮,如以下屏幕截图所示:

Atlas 用户界面的集群部分中的连接按钮

然后,继续执行 Connect your application 部分。从 Driver 选择菜单中选择“Java”,然后从 Version 选择菜单中选择与您安装的版本最匹配的版本。

2

单击连接string右侧的按钮将其复制到剪贴板,如以下屏幕截图所示:

Atlas 用户界面中的连接字符串复制按钮
3

将连接字符串保存在安全位置以供日后使用。将 <db_username><db_password>连接字符串占位符替换为数据库用户的用户名和密码。

4

要连接到应用程序在后续步骤中使用的 sample_mflix示例数据库,请将数据库名称添加到连接字符串中。

Your connection string should resemble the following example:

mongodb+srv://<db_username>:<db_password>@<cluster>/sample_mflix?<options>

完成这些步骤后,您就拥有了一个包含用户名、密码和数据库的连接字符串。

安装 Hibernate ORM 扩展并创建 MongoDB Atlas 集群后,您可以创建连接到 MongoDB 的 Java 应用程序。

1

导航到 MongoHibernateQuickstart 项目的 src/main/resources目录并创建一个名为 hibernate.properties 的新文件,用于存储应用程序的配置设置。

将以下代码复制到此文件中:

hibernate.dialect=com.mongodb.hibernate.dialect.MongoDialect
hibernate.connection.provider_class=com.mongodb.hibernate.jdbc.MongoConnectionProvider
jakarta.persistence.jdbc.url=<connection string>
com.mongodb.hibernate.semantics.nulls=MQL

jakarta.persistence.jdbc.url 属性中,将 <connection string> 占位符替换为您在上一步中创建的连接字符串。

2

注意

默认包目录

本教程使用 Maven 和 Gradle 的默认org.example包,并将应用程序文件添加到 src/main/java/org/example目录。如果使用不同的包名称,请确保在相应的目录中创建文件。

在项目的 src/main/java/org/example目录中,创建一个名为 HibernateUtil.java 的新文件。该实用程序类根据您的配置文件创建一个 SessionFactory

将以下代码复制到此文件中:

package org.example;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static final SessionFactory SESSION_FACTORY =
new Configuration()
.addAnnotatedClass(Movie.class)
.buildSessionFactory();
private HibernateUtil() {}
public static SessionFactory getSessionFactory() { return SESSION_FACTORY; }
}
3

在项目的 org/example目录中,创建一个名为 Movie.java 的新文件。此文件包含您的 Movie 实体,它表示 Atlas 示例数据集 中的 sample_mflix.movies 示例集合。

将以下代码复制到此文件中:

package org.example;
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;
}
}

此文件定义了一个包含以下字段的 Movie 实体:

  • id:电影的唯一标识符,映射到MongoDB _id字段。

  • title:电影的标题。

  • year:电影上映的年份。

  • cast:表示电影演员的字符串列表。

4

在项目的 org/example目录中,创建一个名为 Main.java 的新文件。此文件包含主应用程序程序类,其中存储应用程序的逻辑。

将以下代码复制到此文件中:

package org.example;
import org.hibernate.Transaction;
import org.hibernate.Session;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
var sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// Add CRUD operations here
tx.commit();
session.close();
sf.close();
}
}

完成这些步骤后,您已将Java应用程序配置为使用 Hibernate ORM 扩展并连接到您的MongoDB部署。您的应用程序具有以下文件结构:

MongoHibernateQuickstart
├── src
│ └── main
│ ├── java
│ │ └── org/example
│ │ ├── HibernateUtil.java
│ │ ├── Main.java
│ │ └── Movie.java
│ └── resources
│ └── hibernate.properties
├── .gitignore
├── pom.xml (for Maven projects)
└── build.gradle (for Gradle projects)

您可以对 Movie 对象运行查询,扩展会将其转换为MongoDB查询。

1

导航到 Main.java文件并将以下代码粘贴到 // Add CRUD operations here 注释下方:

var searchTitle = "Little Women";
var results = session.createQuery("from Movie m where m.title = :t", Movie.class)
.setParameter("t", searchTitle)
.getResultList();
for (var m : results) {
System.out.println("Title: " + m.getTitle() + ", Year: " + m.getYear());
}

此代码使用 Hibernate ORM 的 Hibernate 查询语言 (HQL) 来检索title 值为 "Little Women"sample_mflix.movies 文档。然后,它会打印每个结果的 titleyear 值。

提示

要了解有关 HQL 的更多信息,请参阅 Hibernate ORM 用户指南中的Hibernate 查询语言

2

在 IDE 中运行 Main.java文件。输出包含有关数据库命令和检索到的文档的详细信息:

Title: Little Women, Year: 1949
Title: Little Women, Year: 1994

您可以通过创建和修改 Movie 对象将数据写入MongoDB 部署。

1

Main.java文件中,添加以下代码以创建名为 myMovieMovie 实体实例并将其保存到数据库:

var title = "A Real Pain";
var plot = "Mismatched cousins David and Benji tour Poland to honor their grandmother. " +
"Their adventure becomes complicated as old tensions resurface while exploring their family history.";
var year = 2024;
var cast = new ArrayList<>(List.of("Jesse Eisenberg", "Kieran Culkin", "Will Sharpe"));
var myMovie = new Movie(title, plot, year, cast);
session.persist(myMovie);
System.out.println("Movie created with ID: " + myMovie.getId());

此代码创建一个新的 Movie 实体实例,并使用 session.persist() 方法将其保存到数据库。

2

将以下代码添加到 Main.java文件,以更新您在上一步中创建的 Movie实例:

myMovie.getCast().add("Jennifer Grey");
System.out.println("Movie updated with new cast: " + myMovie.getCast());

此代码检索当前的 cast 值并向其中添加新的转换节点。Hibernate ORM 扩展将此更改应用于数据库中的相应文档。

3

将以下代码添加到 Main.java文件以删除myMovie 实体实例:

session.remove(myMovie);
System.out.println("Movie deleted with ID: " + myMovie.getId());

此代码从数据库中删除 myMovie 实体实例及其相应的文档。

4

在 IDE 中运行 Main.java文件。输出包含有关写入操作的详细信息:

Movie created with ID: <ObjectId>
Movie updated with new cast: [Jesse Eisenberg, Kieran Culkin, Will Sharpe, Jennifer Grey]
Movie deleted with ID: <ObjectId>

恭喜您完成本教程!

注意

如果您在学习本教程时运行问题,请使用本页面右侧的 Rate this page 标签页提交反馈。

您可以使用MongoDB Stack Overflow标签 或MongoDB Reddit Community 寻求一般问题的支持。

在本教程中,您创建了一个Java应用程序,该应用程序连接到MongoDB Atlas上托管的MongoDB部署,并使用Hibernate ORM扩展与数据进行交互。

要学习;了解有关 Hibernate ORM 扩展的更多信息,请参阅以下资源:

要查看演示如何安装 Hibernate ORM 扩展以及与图书数据交互的入门教程,请参阅入门 Hibernate ORM 和 MongoDB Foojay 博客文章。