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
/ /

Hibernate ORM 用のMongoDB拡張機能を使い始める

Hibernate ORM を使用すると、Javaオブジェクトを使用してデータベース操作を実行できます。また、Hibernate ORM 用の MongoDB Extension を使用すると、アプリケーションと MongoDB データのやり取りを簡素化できます。このガイドでは、Hibernate ORM 拡張機能のインストール、MongoDB配置を設定し、MongoDBコレクションにマップされたクラスを定義するJavaアプリケーションを作成する方法を示します。

Tip

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

1

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

  • Java バージョン 17 以降

  • 統合開発環境(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ディレクトリに、Movie.java という新しいファイルを作成します。このファイルには、Atlasサンプルデータセットsample_mflix.moviesサンプルコレクションを表す Movie エンティティが含まれています。

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

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

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

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

  • title:映画のタイトル。

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

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

4

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

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

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

これらの手順を完了すると、Hibernate 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());
}

このコードでは、Hibernate ORM の Hibernate クエリ言語(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 = List.of("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 currentCast = new ArrayList<>(myMovie.getCast());
currentCast.add("Jennifer Grey");
myMovie.setCast(currentCast);
System.out.println("Movie updated with new cast: " + myMovie.getCast());

このコードは、現在の cast 値を検索し、それに新しいキャスト ノード を追加し、myMovie エンティティ インスタンスの cast フィールドを更新します。Hibernate 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: [Jesse Eisenberg, Kieran Culkin, Will Sharpe, Jennifer Grey]
Movie deleted with ID: <ObjectId>

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

注意

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

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

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

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

Hibernate ORM 拡張機能をインストールし、書籍データと交流する方法を示す「使用開始」のチュートリアルについては、Hibernate ORM と MongoDB の使用開始 Foojay のブログ記事を参照してください。

戻る

Overview