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

功能兼容性

在此页面上,您可以找到有关 Hibernate ORM 扩展支持和不支持的功能的信息。Hibernate ORM 扩展仅支持MongoDB副本集。当您使用不支持的功能时,Hibernate ORM 扩展会引发 UnsupportedFeatureException。

You can request support for a feature by creating an AHA idea. We prioritize upcoming features based on user demand.

本部分指示 Hibernate ORM 扩展是否支持各种 MongoDB 功能。

要查看 Hibernate ORM 扩展支持的所有 BSON types 的列表,请参阅创建实体指南中的 MongoDB BSON Fields 部分。

MongoDB功能
正式可用性 (GA) 支持

批量写入

✓

删除操作

✓

地理空间查询

不支持。但是,createNativeQuery() 方法支持地理空间查询。在您的 MongoDB 查询语言声明中包含 $geoWithin 或 $near 管道阶段。要了解有关原生查询的更多信息,请参阅执行原生数据库查询指南。

插入操作

✓

MongoDB Search 查询

不支持。但是,createNativeQuery() 方法支持搜索查询。在 MongoDB 查询语言声明中包含 $search 管道阶段。要查看示例,请参阅 运行 MongoDB Search 查询 指南中的“执行原生数据库查询”部分。

MongoDB Vector Search 查询

不支持。但是,createNativeQuery() 方法支持 Vector 搜索查询。在您的 MongoDB 查询语言声明中包含 $vectorSearch 管道阶段。要了解有关原生查询的更多信息,请参阅执行原生数据库查询指南。

使用 MQL 进行原生查询

✓

投影

Partially Supported. Aggregation expressions within query projections are not supported, and you must include all entity fields in your projection.
When the terminal $project stage does not specify _id, the Hibernate ORM extension excludes _id from the results instead of returning it implicitly. A native query that binds its results to an entity must project _id explicitly.

读取操作

✓

更新操作

✓

更新或插入操作

部分支持。通过 StatelessSession API 支持对无版本实体进行更新或插入(upsert)操作。不支持具有使用 @Version 注释的字段的实体。要了解更多信息,请参阅“执行 CRUD 操作”指南中的更新或插入(upsert)文档部分。

MongoDB功能
正式可用性 (GA) 支持

Change Streams

Unsupported. However, you can use a change stream through the MongoDB Java Driver. To learn more, see the Open Change Streams section in the Java Driver documentation.

客户端字段级加密(CSFLE) 和Queryable Encryption(QE)

Unsupported. We are considering this feature for future release. However, you can setup CSFLE/QE when you configure the MongoDB Java Driver. To learn more, see the CSFLE documentation in the MongoDB Server manual.

GridFS

Unsupported. However, you can use GridFS through the MongoDB Java Driver. To learn more, see the Large File Storage with GridFS guide in the Java Driver documentation.

时间序列数据

Unsupported. However, you can create a time series collection through the MongoDB Java Driver. To learn more, see the Time Series Collections guide in the Java Driver documentation.

独立运行的实例 mongod 实例

不受支持。我们建议您将所有独立运行的实例转换为副本集。要了解更多信息,请参阅MongoDB Server手册中的将独立运行的自管理mongod转换为副本集。

视图

不受支持。但是,您可以使用MongoDB Java驱动程序来定义 MongoClient实例。然后,对 MongoDatabase实例调用 createView() 方法以创建新视图。

MongoDB功能
正式可用性 (GA) 支持

锁定

部分支持。具有使用 @Version 注解的字段的实体支持乐观锁。Hibernate ORM 扩展在每次更新和删除时都会将当前版本值添加到 MQL 过滤器中,并在版本不再匹配时抛出 OptimisticLockException。要了解更多信息,请参阅使用乐观锁防止冲突更新指南。

不支持悲观锁 (Pessimistic Locking)。

事务

✓

MongoDB功能
正式可用性 (GA) 支持

关联

部分支持。@OneToOne、@OneToMany、@ManyToOne、@ManyToMany和@ElementCollection注释受支持。@SecondaryTable 和 @JoinFormula 注释不受支持,并导致当 SessionFactory 启动时出错。

自动生成 ID

部分支持。支持自动生成 ObjectId。但是,您可以手动设置 String 和 int 标识符。

@GeneratedValue 注解支持序列式生成,Hibernate ORM 扩展通过名为 hibernate_sequences 的计数器集合来支持该生成。

支持通过 @UuidGenerator 注解或 @GeneratedValue(strategy = UUID) 注解自动生成 java.util.UUID 标识符。

不支持 IDENTITY 和 TABLE 策略、BigInteger 和 BigDecimal 标识符以及非空 @SequenceGenerator options 元素。

复合主键

部分支持。在标准 @Embeddable 类或记录上使用 @EmbeddedId 声明复合主键。Hibernate ORM extension 将键存储为 _id 子文档,从不生成其值。

不支持 @IdClass 注解、多个 @Id 属性、@Struct 聚合嵌入式标识符、非标量键组件以及通过 @MapsId 衍生的身份。

要了解更多,请参阅“创建实体”指南中的 复合主键 部分。

继承策略

部分支持。支持单表继承和映射超类。不支持 JOINED 和 TABLE_PER_CLASS 策略。要了解更多信息,请参阅映射实体继承层次结构指南。

@JdbcTypeCode 注解

不支持。

延迟/预先获取

不支持。

排序

✓

@Table.catalog 元素

不支持。Hibernate ORM 扩展在启动时拒绝 @Table.catalog 元素和 hibernate.default_catalog 属性,因为 MongoDB 不支持跨数据库 $lookup 操作。取而代之,为每个数据库创建一个 SessionFactory 实例。

@Table.schema 元素

✓
映射到单个 MongoDB 数据库中的集合名称前缀。

验证

✓

MongoDB功能
正式可用性 (GA) 支持

固定大小集合

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,通过在 createCollection() 调用中将 CreateCollectionOptions.capped(true) 指定为参数来创建固定大小集合。

集群化集合

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,创建一个名为 clusteredIndex 的文档并定义您的聚集索引。将此聚集索引作为您传递给 MongoDatabase.runCommand() 方法的文档的一部分,该方法定义了聚集文档。

复合索引

✓

嵌入式文档索引

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,调用嵌套方法 MongoCollection.createIndex(Indexes.ascending("field.subfield"))。此方法使用嵌套键路径“字段.subfield”以创建嵌入式文档索引。

地理空间索引

Unsupported. However, you can use geospatial indexes through the MongoDB Java Driver. To learn more, see the Geospatial Indexes section of the Indexes guide in the Java Driver documentation.

MongoDB搜索索引

Unsupported. However, you can use MongoDB Search indexes through the MongoDB Java Driver. To learn more, see the MongoDB Search and Vector Search Indexes section of the Indexes guide in the Java Driver documentation.

MongoDB Vector Search 索引

Unsupported. However, you can use MongoDB Vector Search indexes through the MongoDB Java Driver. To learn more, see the MongoDB Search and Vector Search Indexes section of the Indexes guide in the Java Driver documentation.

Multikey Indexes

Unsupported. However, you can use multikey indexes through the MongoDB Java Driver. To learn more, see the Multikey Indexes (Indexes on Array Fields) section of the Indexes guide in the Java Driver documentation.

部分索引

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,调用嵌套方法 MongoCollection.createIndex(Indexes.partialFilterExpression()) 来创建部分索引。

模式验证

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,通过 MongoDatabase.runCommand() 方法执行 collMod 命令来创建验证器。

单字段索引

✓

Sparse Indexes

不支持。但是,您可以使用 MongoDB Java 驱动程序来定义 MongoClient 实例。然后,在调用 MongoCollection.createIndex() 方法时将 IndexOptions().sparse(true) 指定为参数,以创建 sparse index。

Unique Indexes

✓

在创建模型后更新嵌入式模型索引

不支持。但是,您可以手动删除并重新创建嵌入式模型索引。

要了解有关索引的更多信息,请参阅索引以进行查询优化指南。

本部分指示 Hibernate ORM 扩展是否支持各种 Hibernate ORM 功能。

数据类型
正式可用性 (GA) 支持

集合类型(列表、集、映射、数组)

✓
不支持 @ElementCollection 和 CollectionTable。但是,通过使用 @Embeddable 和 @Struct 注解的可嵌入类,支持嵌入式结构体的集合。

可嵌入式实体、标量类型

部分支持。java.time.Instant、java.time.Duration、java.time.Year、java.time.ZoneId、java.time.ZoneOffset 和 java.util.TimeZone 类型支持顶级和嵌套实体。

嵌入式实体,二进制

✓

嵌入式实体、标识符类型

部分支持。在实体持久化之前,手动设置实体的 ID。

嵌入式实体, JSON

✓

嵌入式实体、空语义

✓

顶级实体,二进制

✓

顶级实体、标识符类型

✓
在持久化实体之前手动分配 UUID,或使用 @UuidGenerator 注解自动生成它们。

顶级实体, JSON

✓

顶级实体,空语义

✓

顶级实体、标量类型

✓

顶级实体、时态类型

部分支持。java.time.Instant、java.time.Duration、java.time.Year、java.time.ZoneId、java.time.ZoneOffset 和 java.util.TimeZone 类型支持顶级和嵌套实体。

三元逻辑(True、False 或 UNKNOWN)

不支持。

Hibernate ORM 扩展要求您设置 com.mongodb.hibernate.semantics.nulls 属性,且 MQL 是唯一支持的值。Null 比较遵循 MongoDB 查询语言语义,而不是 Hibernate ORM 三元逻辑。当未设置该属性时,Hibernate ORM 扩展会在启动时抛出异常。

Hibernate ORM 功能
正式可用性 (GA) 支持

HQL 和 JPQL 查询、聚合操作符

✓

HQL 和 JPQL 查询、算术操作符

部分支持。支持 +、-、*、/、div 操作符,以及 SELECT 和 WHERE 子句中的一元 - 和 +。

不支持将函数调用作为操作数,包括 HQL % 操作符,Hibernate ORM 会将其重写为 mod() 函数调用。

要了解更多信息,请参阅《指定查询》指南中的使用计算表达式部分。

HQL 和 JPQL 查询、数组操作符

✓

HQL 和 JPQL 查询,日期时间函数

部分支持。在 SELECT 子句中支持 datetime 字段上的 extract() 和 format() 函数,并将它们转换为 MongoDB 日期操作符和 $dateToString 操作符。每个函数都支持一组特定的 datetime 字段和模式代码。如要了解更多信息,请参阅 在查询中使用 Datetime 函数 指南。

HQL 和 JPQL 查询,字符串函数

部分支持。支持 length()、upper()、lower()、concat()、substring()、locate()、replace()、trim()、pad() 和 repeat() 函数以及 SELECT 子句中 string 字段上的 || 操作符,并将它们转换为 MongoDB string 操作符。不支持 position()、overlay()、left()、right() 或 collate() 函数。有关更多信息和查看示例,请参阅在查询中使用 string 函数指南。

HQL 和 JPQL 查询,Case 表达式

部分支持。

  • 支持 SELECT 子句中的简单和搜索 CASE 表达式、WHERE 子句中比较的操作数以及批量更新声明的 SET 子句。将它们转换为 MongoDB $switch 操作符。

  • 不支持在 ORDER BY 子句中使用 CASE 表达式,除非同一个 CASE 表达式是 GROUP BY 键。此外,不支持将 CASE 表达式用作 LIKE 谓词的匹配表达式、IN 或 IS NULL 谓词的测试表达式,或用作 WHERE 子句谓词。

有关更多信息并查看示例,请参阅《指定查询》指南中的“用于条件逻辑的使用案例表达式”部分。

HQL 和 JPQL 查询、比较操作符

  • >, >=, <, <=, =, <>:支持,包括计算操作数。要了解更多信息,请参阅“指定查询”指南中的使用计算表达式部分。

  • EXISTS: 部分支持。支持 EXISTS 子查询,对单个字段的嵌入数组元素应用过滤器,并将其转换为 MongoDB $elemMatch 操作符。不支持某些 EXISTS 子查询。要了解更多,请参阅“指定查询”指南中的 EXISTS 部分。

  • BETWEEN: 受支持。转换为 MongoDB $gte 和 $lte 操作符。要了解更多信息,请参阅“指定查询”指南中的 BETWEEN 部分。

  • IS NULL 以及 IS NOT NULL:受支持。匹配显式 null 值和缺失字段或这些值的否定,转换为 MongoDB $match 操作符。要了解更多信息,请参阅“指定查询”指南中的 IS NULL 和 IS NOT NULL 部分。

  • IN 以及 NOT IN:部分支持。支持针对字段路径(Field Path)进行测试的字面量或参数列表,并转换为 MongoDB $in 和 $nin 操作符。不支持子查询或数组值表达式作为列表。要了解更多信息,请参阅“指定查询”指南中的 IN 和 NOT IN 部分。

  • 与 null 的比较:支持。应用 MongoDB 查询语言 null 语义,而不是 Hibernate ORM 三元逻辑,因此与 null 的比较匹配显式 null 值和缺失字段。要了解更多信息,请参阅“指定查询”指南中的将字段值与 Null 进行比较部分。

  • 行值谓词:部分支持。支持对括号内的字段列表(例如 where (title, year) = (:t, :y))使用 =、<>、IN 和 NOT IN 操作符,将每个谓词转换为每个组件的 MongoDB $eq 比较。不支持使用 >、>=、< 或 <= 操作符的行值谓词。要了解更多信息,请参阅“指定查询”指南中的一次比较多个字段部分。

  • LIKE: 受支持。转换为 MongoDB $regex 操作符。

  • ANY, ALL: 不支持。您可以使用 createNativeQuery() 方法并在您的 MongoDB 查询语言声明中传递比较操作符。要了解有关原生查询的更多信息,请参阅执行原生数据库查询指南。

HQL 和 JPQL 查询、元素操作符

✓

HQL 和 JPQL 查询、评估操作符

部分支持。通过将 LIKE、NOT LIKE、ILIKE 和 NOT ILIKE 谓词转换为正则表达式过滤器,支持 MongoDB $regex 评估操作符。有关更多信息和查看示例,请参阅“指定查询”指南中的 LIKE 部分。

HQL 和 JPQL 查询,分组

部分支持。支持 GROUP BY 和 HAVING 子句,它们转换为 MongoDB $group 和 $match 阶段。分组键可以是字段引用或计算表达式。有关更多信息和查看示例,请参阅“修改查询结果”指南中的分组结果部分。

  • 字段引用键:支持,包括 @Struct 聚合可嵌入对象和连接实体的字段。

  • 对 @Struct 聚合嵌入式对象的聚合函数:不支持。您可以将聚合函数应用于嵌入式对象的字段(如 count(a.intField) 中所示),但不能应用于嵌入式对象本身(如 count(a) 中所示)。

  • 计算表达式键:支持。只有当您将两者写入得完全一样时,SELECT 或 HAVING 子句中的表达式才会解析为分组键。

  • 多余的列:不支持。SELECT、HAVING 或 ORDER BY 子句中的每一列都必须是分组键或包含在分组键中。

  • ORDER BY 基于分组键:支持,适用于字段引用键和计算表达式键。

  • SELECT DISTINCT 使用 GROUP BY:不支持。

HQL 和 JPQL 查询、连接

部分支持。您可以通过导航映射的关联(如 from Movie m join m.comments c 中所示)或通过命名实体并提供 ON 子句(如 from Movie m join Comment c on c.date > m.released 中所示)来连接实体。每个连接都转换为 MongoDB $lookup 和 $unwind 阶段。要查看示例,请参阅跨集合连接实体指南。

  • 内连接和左外连接:支持。

  • JOIN FETCH 子句:支持。

  • 链式连接:受支持。您可以跨两个以上的实体进行连接。

  • 复合键连接:部分支持。您可以连接目标实体具有 @EmbeddedId 复合键的 @ManyToOne 或 @OneToOne 关联。您还可以在 ON 条件中使用 = 比较整个复合标识符。

    不支持在此类关联上使用 @JoinColumn 注解、对整个标识符进行排序比较以及涉及复合键的 @ManyToMany 关联。

    要了解更多信息,请参阅“跨集合连接实体”指南中的复合键连接部分。

  • ON 条件:部分支持。ON 条件支持与 WHERE 子句相同的比较、逻辑和谓词操作符。这包括将多个字段比较与 AND 或 OR 组合的复合条件,以及范围和不等式条件。ON 条件必须比较列。您不能像 on m = c.movie 中那样比较实体引用,也不能像 on c.movie.title = 'Blue Jasmine' 中那样在条件内导航关联。

  • 右外连接、全外连接、交叉连接、横向连接和子查询连接:不支持。您可以使用 createNativeQuery() 方法运行查询多个集合的聚合操作。要了解有关原生查询的更多信息,请参阅执行原生数据库查询指南。

HQL 和 JPQL 查询,逻辑操作符

✓

HQL 和 JPQL 查询,字符串函数

部分支持。支持 character_length()、length()、substring()、trim()、upper()、lower()、pad()、lpad()、rpad()、concat()、locate() 和 repeat() 函数,以及 || 连接操作符。不支持其他 Hibernate ORM string 函数。

Hibernate ORM 功能
正式可用性 (GA) 支持

一级缓存

✓

二级缓存

✓

本部分指示 Hibernate ORM 扩展是否支持各种外部框架或库。

框架或库
正式可用性 (GA) 支持

Spring Boot 和 Spring Data JPA

部分支持。Hibernate ORM 扩展提供一个 Spring Boot 启动器,用于配置由 MongoDB 支持的 JPA 和 Spring Data JPA 存储库。我们不保证支持 Spring Boot 或 Spring Data 的所有功能。要了解更多,请参阅 Spring Boot 和 Spring Data JPA 集成 部分。