Docs 菜单
Docs 主页
/ /

创建实体

在本指南中,您可以学习;了解如何创建表示MongoDB集合的 Hibernate ORM 实体。实体是定义数据结构的Java类。使用 Hibernate ORM 扩展时,您可以将每个实体映射到MongoDB集合,并使用这些实体与集合的文档进行交互。

提示

实体教程

要查看演示如何使用实体和 Hibernate ORM 扩展对一对多关系进行建模的教程,请参阅 使用 Hibernate ORM 和MongoDB进行建模关系 Foojay博文。

MongoDB以称为BSON的二进制表示形式组织和存储文档,从而支持灵活数据处理。本节介绍 Hibernate ORM 扩展对BSON字段的支持,您可以将其包含在实体中。

提示

要学习;了解有关MongoDB如何存储BSON数据的更多信息,请参阅MongoDB Server手册中的BSON 类型。

下表描述了支持的BSON字段类型以及可在 Hibernate ORM 实体中使用的 Hibernate ORM 扩展等效项:

BSON字段类型
扩展字段类型
BSON描述

null

null

Represents a null value or absence of data.

Binary

byte[]

Stores binary data with subtype 0.

String

charjava.lang.Characterjava.lang.Stringchar[]

Stores UTF-8 encoded string values.

Int32

int or java.lang.Integer

Stores 32-bit signed integers.

Int64

long or java.lang.Long

Stores 64-bit signed integers.

Double

double or java.lang.Double

Stores floating-point values.

Boolean

boolean or java.lang.Boolean

Stores true or false values.

Decimal128

java.math.BigDecimal

Stores 28-bit decimal values.

ObjectId

org.bson.types.ObjectId

Stores unique 12-byte identifiers that MongoDB uses as primary keys.

Date

java.time.Instant

Stores dates and times as milliseconds since the Unix epoch.

Object

@org.hibernate.annotations.Struct aggregate embeddable

Stores embedded documents with field values mapped according to their respective types. @Struct aggregate embeddables might also contain array or Collection attributes.

Array

Arrayjava.util.Collection(或子类型)支持的类型

Stores array values with elements mapped according to their respective types. Character arrays require setting the hibernate.type.wrapper_array_handling configuration property.

要创建表示MongoDB集合的实体,请在项目的基础包目录中创建一个新的Java文件,并将实体类添加到新文件中。在实体类中,指定要存储的字段和集合名称。 @jakarta.persistence.Table 注释的 name 元素表示您的MongoDB集合名称。使用以下语法定义实体:

@Entity
@Table(name = "<collection name>")
public class <EntityName> {
@Id
@ObjectIdGenerator
private ObjectId id;
// Include additional fields here
private <field type> <field name>;
// Parameterized constructor
public <EntityName>(<parameters>) {
// Initialize fields here
}
// Default constructor
public <EntityName>() {
}
// Getter and setter methods
public <field type> get<FieldName>() {
return <field name>;
}
public void set<FieldName>(<field type> <field name>) {
this.<field name> = <field name>;
}
}

要使用实体,您可以在应用程序文件中查询实体。要学习;了解有关 Hibernate ORM 扩展中的增删改查操作的详情,请参阅 执行增删改查操作指南。

此示例Movie.java 实体类定义了一个 Movie 实体,其中包含以下信息:

  • @Entity 将该类标记为 Hibernate ORM 实体的注解

  • @Table movies注释,用于将实体映射到Atlas示例数据集中的 集合

  • @Id@ObjectIdGenerator 注解,用于将 id字段指定为主主键并配置自动 ObjectId 生成

  • 表示电影数据的私有字段

  • 用于实体实例化的默认构造函数和参数化构造函数

  • 提供对实体字段访问权限权限的 Getter 和 setter 方法

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;
@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;
}
}

Hibernate ORM 扩展通过 Hibernate ORM @Embeddable 注释支持嵌入式文档。使用嵌入式文档,您可以在MongoDB文档中创建一对多、多对一和一对一关系。这种格式非常适合表示经常一起访问的数据。

要表示嵌入式文档,请在类上使用 @Struct@Embeddable 注解来创建 @Struct 聚合嵌入式文档。然后,将可嵌入类型作为字段包含在父实体中。 Hibernate ORM 扩展支持嵌入单个对象、数组和可嵌入对象的集合。

提示

要学习;了解有关@Struct 聚合可嵌入项的更多信息,请参阅 Hibernate ORM 文档中的 @Struct 聚合可嵌入项映射。

一对一关系是指一个数据库中的记录与另一个数据库中的一条记录恰好相关联。在MongoDB中,您可以创建带有嵌入式文档字段的集合来对一对一关系进行建模。 Hibernate ORM 扩展允许您使用 @Struct 聚合可嵌入对象来创建嵌入式文档字段。

该示例在实体中定义了一个具有@Struct 聚合嵌入式类型的字段,类似于本指南中的定义实体示例。示例Movie.java 实体类包含以下信息:

  • @Entity@Table 注解,用于定义实体并将其映射到 movies集合

  • @Id 以及将 id字段指定主键的@ObjectIdGenerator 注解

  • 表示电影标题的字符串字段

  • @Struct 聚合表示电影奖项和工作室信息的可嵌入式字段

以下示例表示一对一关系,因为每个 Movie 实体都与一个 Awards 可嵌入式设备和一个 Studio 可嵌入式设备相关联:

@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private Awards awards;
private Studio studio;
public Movie(String title, Awards awards, Studio studio) {
this.title = title;
this.awards = awards;
this.studio = studio;
}
public Movie() {
}
// Getter and setter methods
}

以下示例代码创建一个 Awards @Struct 聚合可嵌入对象:

@Embeddable
@Struct(name = "Awards")
public class Awards {
private int wins;
private int nominations;
private String text;
public Awards(int wins, int nominations, String text) {
this.wins = wins;
this.nominations = nominations;
this.text = text;
}
public Awards() {
}
// Getter and setter methods
}

以下示例代码创建一个 Studio @Struct 聚合可嵌入对象:

@Embeddable
@Struct(name = "Studio")
public class Studio {
private String name;
private String location;
private int foundedYear;
public Studio(String name, String location, int foundedYear) {
this.name = name;
this.location = location;
this.foundedYear = foundedYear;
}
public Studio() {
}
// Getter and setter methods
}

一对多关系是指一个数据库中的一条记录与另一个数据库中的多条记录相关联。在MongoDB中,您可以定义一个集合字段来存储嵌入式文档列表,以对一对多关系进行建模。 Hibernate ORM 扩展允许您使用 @Struct 聚合可嵌入对象的列表来创建嵌入式文档字段。

该示例定义了一个字段,用于在实体中存储@Struct 聚合可嵌入式对象的列表,类似于本指南中的定义实体示例。示例Movie.java 实体类包含以下信息:

  • @Entity@Table 注解,用于定义实体并将其映射到 movies集合

  • @Id 以及将 id字段指定主键的@ObjectIdGenerator 注解

  • 表示电影标题的字符串字段

  • 存储多个 Writer @Struct 聚合可嵌入对象的列表字段,表示作者信息

以下示例表示一对多关系,因为每个 Movie 实体都与多个 Writer 嵌入式对象相关联:

@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
@Column(name = "_id")
private ObjectId id;
private String title;
private List<Writer> writers;
public Movie(String title, List<Writer> writers) {
this.title = title;
this.writers = writers;
}
public Movie() {
}
// Getter and setter methods
}

以下示例代码创建一个 Writer @Struct 聚合可嵌入对象:

@Embeddable
@Struct(name = "Writer")
public class Writer {
private String name;
public Writer() {
}
public Writer(String name) {
this.name = name;
}
// Getter and setter methods
}

要学习;了解如何使用实体运行数据库操作,请参阅“与数据交互”部分中的以下指南:

要学习;了解有关 Hibernate ORM 字段的更多信息,请参阅 Hibernate ORM 文档中的映射类型部分。

要学习;了解有关 Hibernate ORM 实体的更多信息,请参阅 Hibernate ORM 文档中的 POJO 模型。

后退

开始体验

在此页面上