MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /

エンティティの作成

このガイドでは、MongoDBコレクションを表すHibernate ORM エンティティを作成する方法を学びます。Entity は、データの構造を定義するJavaクラスです。Hibernate ORM 拡張機能を使用する場合、各エンティティをMongoDBコレクションにマッピングし、これらのエンティティを使用してコレクションのドキュメントと交流できます。

Tip

Entity チュートリアル

エンティティと Hibernate ORM 拡張機能を使用して 1 対多の関係をモデル化する方法を示すチュートリアルについては、「Hibernate ORM と MongoDB を使用した関係のモデリング」の Foojay ブログ記事をご覧ください。

MongoDB、 BSONと呼ばれるバイナリ形式でドキュメントを整理して保存し、柔軟なデータ処理を可能にしています。このセクションでは、エンティティに含めることができるBSONフィールドに対するHibernate ORM拡張機能のサポートについて説明します。

Tip

MongoDB がBSONデータを保存する方法の詳細については、 MongoDB Serverマニュアルの「 BSON types 」を参照してください。

次の表では、サポートされているBSONフィールド型と、非表示の ORM エンティティで使用できる非表示の 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.String、または char[]

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 集計埋め込み可能

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

Array

Array、サポートされているタイプの java.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 拡張機能での CRUD 操作の詳細については、CRUD 操作の実行ガイドをご覧ください。

このサンプルMovie.java エンティティクラスは、次の情報を含む Movie エンティティを定義します。

  • @Entity クラスを Hibernetes ORM エンティティとしてマークする注釈

  • @Table Atlasサンプルデータセットからエンティティを moviesコレクションにマッピングする注釈

  • @Ididフィールドをプライマリキーとして指定し、ObjectId の自動生成を構成する @ObjectIdGenerator 注釈

  • 映画データを表すプライベート フィールド

  • エンティティインスタンス化のためのデフォルトおよびパラメータ付きコンストラクタ

  • エンティティのフィールドへのアクセスを提供する getter メソッドと setter メソッド

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

Tip

エンティティクラス定義で使用されるフィールドの詳細については、このガイドのMongoDB BSONフィールドセクションを参照してください。

Hibernetes ORM 拡張機能は、 Hibernetes ORM @Embeddable 注釈による埋め込みドキュメントをサポートします。埋め込みドキュメントを使用すると、 MongoDBドキュメント内に 1 対多、多対 1、1 対 1 の関係を作成できます。この形式は、頻繁にアクセスされるデータを表現するのに最適です。

埋め込みドキュメントを表すには、クラスで @Struct@Embeddable アノテーションを使用して @Struct 集計埋め込み可能を作成します。次に、親エンティティに埋め込み可能な型をフィールドとして含めます。Hibernetes ORM 拡張機能は、埋め込み可能な単一オブジェクト、配列、およびコレクションの埋め込みをサポートしています。

Tip

@Struct集計埋め込み可能ファイルの詳細については、 Hibernetes ORM ドキュメントの @Strict 集計埋め込み可能マッピングを参照してください。

1 対 1 の関係とは、1 つのデータベースのレコードが別のデータベースの 1 つのレコードのみに関連付けられている場合を指します。MongoDBでは、埋め込みドキュメントフィールドを持つコレクションを作成して、1 対 1 の関係をモデル化できます。Hibernetes ORM 拡張機能では、@Struct 集計埋め込み可能ファイルを使用して埋め込みドキュメントフィールドを作成できます。

この例では、このガイドのエンティティの定義の例と同様に、エンティティ内に @Struct 集計埋め込み可能型を持つフィールドを定義します。サンプルMovie.java エンティティクラスには、次の情報が含まれています。

  • @Entity エンティティを定義し、それを moviesコレクションにマッピングする @Table アノテーション

  • @Id idフィールドをプライマリキーとして指定する @ObjectIdGenerator 注釈

  • 映画のタイトルを表す Stringフィールド

  • @Struct 映画情報とチームの情報を表す集計埋め込みフィールド

次の例は1 対 1 の関係を表します。各 Movie エンティティは 1 つの Awards 埋め込み可能と 1 つの 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
}

1 対多の関係とは、1 つのデータベースのレコードが別のデータベースの多くのレコードに関連付けられている場合を指します。 MongoDBでは、埋め込みドキュメントのリストを保存するコレクションフィールドを定義して、 1 対多の関係をモデル化できます。 Hibernetes ORM 拡張機能を使用すると、@Struct 集計埋め込み可能ファイルのリストを使用して埋め込みドキュメントフィールドを作成できます。

この例では、このガイドの エンティティの定義例 と同様に、エンティティに @Struct 集計埋め込み可能ファイルのリストを保存するフィールドを定義します。サンプルMovie.java エンティティクラスには、次の情報が含まれています。

  • @Entity エンティティを定義し、それを moviesコレクションにマッピングする @Table アノテーション

  • @Id idフィールドをプライマリキーとして指定する @ObjectIdGenerator 注釈

  • 映画のタイトルを表す Stringフィールド

  • 複数の Writer @Struct 集計埋め込み可能性を保存するリストフィールド。これは書込み情報を表す

次の例は1 対多の関係を表しています。各 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
}

エンティティを使用してデータベース操作を実行する方法については、「 データの操作 」セクションにある次のガイドを参照してください。

Hibernetes ORM フィールドの詳細については、 Hibernetes ORM ドキュメントの「 マッピング型 」セクションを参照してください。

Hibernetes ORM エンティティの詳細については、 Hibernetes ORM ドキュメントの POJO モデル を参照してください。

戻る

はじめる

項目一覧