AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

コレクションを表すエンティティの作成

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

Tip

Entity チュートリアル

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

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

Tip

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

次の表では、サポートされているBSONフィールド型と、非表示の ORM エンティティで使用できる非表示の ORM 拡張機能について説明しています。

BSONフィールド型
拡張フィールドタイプ
BSON の説明

null

null

null 値またはデータがないことを表します。

Binary

byte[]

サブタイプ 0 のバイナリ データを保存します。

String

charjava.lang.Characterjava.lang.String、または char[]

UTF-8 でエンコードされた文字列値を保存します。

Int32

int or java.lang.Integer

32 ビットの符号付き整数を保存します。

Int64

long or java.lang.Long

64 ビットの符号付き整数を保存します。

Double

double or java.lang.Double

浮動小数点値を保存します。

Boolean

boolean or java.lang.Boolean

true または false 値を保存します。

Decimal128

java.math.BigDecimal

28 ビットの 10 進数値を保存します。

ObjectId

org.bson.types.ObjectId

MongoDB がプライマリキーとして使用する一意の 12 バイト識別子を保存します。

Date

java.time.Instant

UNIXエポック からの日付と時刻をミリ秒として保存します。

Object

@org.hibernate.annotations.Struct 集計埋め込み可能

それぞれのタイプに従ってマップされたフィールド値を持つ埋め込みドキュメントを保存します。 @Struct 集計埋め込み可能には、配列または Collection 属性も含まれる場合があります。

Array

Array、サポートされているタイプの java.util.Collection(またはサブタイプ)

それぞれの型に従ってマップされた要素を持つ配列値を保存します。文字配列には、 hibernate.type.wrapper_array_handling 構成プロパティを設定する必要があります。

MongoDBコレクションを表すエンティティを作成するには、プロジェクトの基本パッケージディレクトリに新しいJavaファイルを作成し、新しいファイルにエンティティクラスを追加します。エンティティクラスで、保存するフィールドとコレクション名を指定します。@jakarta.persistence.Table アノテーションの name 要素はMongoDBコレクション名を表します。エンティティを定義するには、次の構文を使用します。

@Entity
@Table(name = "<collection name>")
public class <EntityName> {
@Id
// Specify your primary key field here
private <field type> <field name>;
// 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 注釈

    Tip

    プライマリキー値

    この例では、 ObjectIdフィールドをエンティティのプライマリキーとして指定していますが、@Id アノテーションを使用して、StringInt、または UUID フィールドをプライマリキーとして設定することもできます。

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

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

  • エンティティのフィールドへのアクセスを提供する 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 集計埋め込み可能ファイルの詳細については、Hibernate ORM ドキュメントの @Struct 集計埋め込み可能マッピング を参照してください。

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 モデル を参照してください。