Docs Menu
Docs Home
/ /

Get Started with the MongoDB Extension for Hibernate ORM

Hibernate ORM enables you to use Java objects to perform database operations, and you can use the MongoDB Extension for Hibernate ORM to simplify your application's interactions with MongoDB data. This guide shows how to install the Hibernate ORM extension, set up a MongoDB deployment, and create a Java application that defines classes mapped to MongoDB collections.

Tip

MongoDB Atlas は、MongoDB 配置をホストする完全管理のクラウドデータベース サービスです。このガイドの手順に従い、独自の無料(クレジット カード不要)MongoDB Atlas 配置を作成できます。

1

開発を開始する前に、ローカル マシンに次の依存関係がインストールされていることを確認してください。

  • Java version 17 or later

  • 統合開発環境(IDE)(IntelliJ IDEAEclipse など)

注意

このチュートリアルでは、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 で、プロジェクトが再ロードされているか、 が同期されている ことを確認してください。

これらの手順を完了すると、 Hibernetes ORM 拡張機能がインストールされ、 IDE に新しい Maven または Gradleプロジェクトが設定されます。

MongoDB Atlas では無料階層の MongoDB 配置を作成して、データを保存および管理できます。 MongoDB Atlas は、MongoDB databaseをクラウドでホストおよび管理します。

1

MongoDB の使用開始ガイドを完了して、新しい Atlas アカウントを設定し、サンプルデータを新しい無料階層のMongoDBデプロイにロードします。Cloud Deployment タブの手順に従って、クラウドにMongoDB Atlas の配置を作成します。

2

データベースユーザーを作成 したら、そのユーザーのデータベースユーザー名とデータベースパスワードを安全な場所に保存して、後のステップで使用します。

これらの手順を完了すると、Atlas に新しい無料階層の MongoDB 配置が作成され、データベースユーザーの認証情報が作成され、データベースに サンプル データがロードされます 。

MongoDB配置に接続するには、 接続string とも呼ばれる 接続 URIMongoDB を提供します。これは、 配置に接続する方法と接続中の動作をドライバーに指示します。

接続stringには、配置のホスト名またはIPアドレスとポート、認証メカニズム、ユーザー認証情報(該当する場合)、および接続オプションが含まれます。

1

前のステップ で作成した配置の接続文字列を取得するには、Atlas アカウントにログして「Clusters 」セクションに移動します。次のスクリーンショットに示すように、新しい配置で [Connect] ボタンをクリックします。

Atlas UI のクラスター セクションの接続ボタン

次に、Connect your application セクションに進みます。Driver 選択メニューから「Java」を選択し、Version 選択メニューからインストールしたバージョンに最適なバージョンを選択します。

2

次のスクリーンショットに示すように、接続文字列の右側にある ボタンをクリックして、接続stringをクリップボードにコピーします。

UI の接続 コピーstring ボタンAtlas
3

後で使用するために接続文字列を安全な場所に保存します。 <db_username><db_password>接続文字列のプレースホルダーを、データベースユーザーのユーザー名とパスワードに置き換えます。

4

アプリケーションが後のステップで使用する sample_mflixサンプルデータベースに接続するには、接続文字列にデータベース名を追加します。

接続文字列は、次の例のようになります。

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

次のステップで XML構成ファイルに接続文字列を追加する前に、接続文字列で次の特殊文字をエンコードする必要があります。

  • &: に置き換え &amp;

  • ': に置き換え &apos;

  • ": に置き換え &quot;

  • <: に置き換え &lt;

  • >: に置き換え &gt;

デフォルトでは 、Atlas接続文字列には、& 文字で区切られた接続オプションが含まれます。この文字を XML でエンコードすることを確認します。

これらの手順を完了すると、ユーザー名、パスワード、およびデータベース を含む接続文字列が作成されます。

Hibernetes ORM 拡張機能をインストールし、 MongoDB Atlasクラスターを作成したら、 MongoDBに接続するJavaアプリケーションを作成できます。

1

MongoHibernateQuickstart プロジェクトの src/main/resourcesディレクトリに移動し、アプリケーションの構成設定を保存する hibernate.cfg.xml という名前の新しいファイルを作成します。

次のコードをこのファイルにコピーします。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">com.mongodb.hibernate.dialect.MongoDialect</property>
<property name="hibernate.connection.provider_class">
com.mongodb.hibernate.jdbc.MongoConnectionProvider
</property>
<property name="jakarta.persistence.jdbc.url">
connection-string
</property>
<property name="hibernate.show_sql">true</property>
<mapping class="org.example.Movie"/>
</session-factory>
</hibernate-configuration>

jakarta.persistence.jdbc.urlプロパティで、connection-string プレースホルダーを前の手順で作成した接続文字列に置き換えます。

2

注意

デフォルトのパッケージ ディレクトリ

このチュートリアルでは、Maven と Gradle のデフォルトのorg.exampleパッケージを使用し、アプリケーションファイルを src/main/java/org.exampleディレクトリに追加します。別のパッケージ名を使用する場合は、対応するディレクトリにファイルを作成していることを確認してください。

プロジェクトの src/main/java/org.exampleディレクトリに、HibernateUtil.java という新しいファイルを作成します。このユーティリティクラスは、 hibernate.cfg.xml構成ファイルに基づいて 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().configure("hibernate.cfg.xml").buildSessionFactory();
private HibernateUtil() {}
public static SessionFactory getSessionFactory() { return SESSION_FACTORY; }
}
3

プロジェクトのorg.example ディレクトリに、 という新しいファイルを作成します。このファイルには、AtlasサンプルデータセットのMovie.java Moviesample_mflix.moviesサンプルコレクションを表す エンティティが含まれています。

次のコードをこのファイルにコピーします。

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

このファイルは、次のフィールドを持つ Movie エンティティを定義します。

  • id: MongoDB _idフィールドにマッピングされる、映画の一意の識別子。

  • title:映画のタイトル。

  • year: 映画が公開された年。

  • cast: 映画のキャスト メンバーを表す string の配列。

4

プロジェクトの org.exampleディレクトリに、Main.java という新しいファイルを作成します。このファイルには、アプリケーションのロジックが保存されるメインのアプリケーションクラスが含まれています。

次のコードをこのファイルにコピーします。

package org.example;
import org.hibernate.Transaction;
import org.hibernate.Session;
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();
}
}

これらの手順を完了すると、 Hibernetes ORM 拡張機能を使用し、 MongoDBデプロイに接続するように構成されたJavaアプリケーションが作成されます。アプリケーションのファイル構造は次のとおりです。

MongoHibernateQuickstart
├── src
│ └── main
│ ├── java
│ │ └── org.example
│ │ ├── HibernateUtil.java
│ │ ├── Main.java
│ │ └── Movie.java
│ └── resources
│ └── hibernate.cfg.xml
├── .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());
}

このコードでは、 Hibernetes ORM の Hibernet Query Language(HQL) を使用して、title の値が "Little Women" である sample_mflix.movies ドキュメントを検索します。次に、各結果の titleyear の値が出力されます。

Tip

HQL の詳細については、 Hibernet ORM ユーザーガイドの 「非表示のクエリ言語」 を参照してください。

2

IDE で Main.javaファイルを実行します。出力には、データベースコマンドと検索されたドキュメントの詳細が含まれます。

Hibernate: {"aggregate": "movies", "pipeline": [{"$match": {"title": {"$eq": {"$undefined": true}}}},
{"$project": {"_id": true, "cast": true, "plot": true, "title": true, "year": true}}]}
Title: Little Women, Year: 1949
Title: Little Women, Year: 1994

Movie オブジェクトを作成および変更することで、 MongoDBデプロイにデータを書き込むことができます。

1

Main.javaファイルに次のコードを追加して、myMovie という Movie エンティティインスタンスを作成し、データベースに保存します。

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 String[]{"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インスタンスを更新します。

var updatedCast = new String[]{"Jesse Eisenberg", "Kieran Culkin", "Will Sharpe", "Jennifer Grey"};
myMovie.setCast(updatedCast);
System.out.println("Movie updated with new cast member: " + updatedCast[3]);

このコードは、myMovie エンティティインスタンスの castフィールドをアップデートします。 Hibernetes ORM 拡張機能は、 データベース内の対応するドキュメントにこの変更を適用します。

3

次のコードを Main.javaファイルに追加して、myMovie エンティティインスタンスを削除します。

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

このコードは、myMovie エンティティインスタンスとそれに対応するドキュメントをデータベースから削除します。

4

IDE で Main.javaファイルを実行します。出力には、書込み (write) 操作に関する詳細が含まれます。

Hibernate: {"insert": "movies", "documents": [{"cast": {"$undefined": true}, "plot": {"$undefined": true}, "title": {"$undefined": true}, "year": {"$undefined": true}, "_id": {"$undefined": true}}]}
Hibernate: {"delete": "movies", "deletes": [{"q": {"_id": {"$eq": {"$undefined": true}}}, "limit": {"$numberInt": "0"}}]}
Movie created with ID: <ObjectId>
Movie updated with new cast member: Jennifer Grey
Movie deleted with ID: <ObjectId>

チュートリアルを完了しました。

注意

このチュートリアルで問題が発生した場合は、このページの右側にある Rate this pageタブを使用してフィードバックを送信してください。

MongoDB Stack Overflowタグ または MongoDB Reddit Community を使用して、一般的な質問のサポートを見つけることができます。

このチュートリアルでは、 MongoDB AtlasでホストされているMongoDBデプロイに接続し、 Hibernetes ORM 拡張機能 を使用してデータを操作するJavaアプリケーションを作成しました。

Hibernetes ORM 拡張機能の詳細については、次のリソースを参照してください。

To view a Getting Started tutorial that shows how to install the Hibernate ORM extension and interact with book data, see the Getting Started With Hibernate ORM and MongoDB Foojay blog post.

戻る

Overview