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

Spring Boot Starter を使ってみる

このチュートリアルでは、Hibernate ORM拡張機能を使用して、Java Persistence API (JPA) エンティティをMongoDBに保存するSpring Bootアプリケーションを作成する方法を学ぶことができます。このアプリケーションは、Movie エンティティ、Spring Data JPAリポジトリ、およびスタートアップ時に実行するクエリを定義します。

開始する前に、「MongoDB配置の作成」および「接続文字列の作成」の手順を完了してください。これらは「Hibernate ORM拡張機能の概要」チュートリアルの一部です。これらの手順により、このチュートリアルで使用するAtlas配置、サンプルデータ、および接続文字列が作成されます。

1

Spring Boot 4.x プロジェクト MongoHibernateSpringQuickstart を作成します。Spring Initializr を使用してプロジェクトを生成するか、IDE で作成できます。

Spring Initializrは、MongoHibernateSpringQuickstartApplication.javaのように、プロジェクト名にちなんだメインアプリケーションクラスを生成します。Spring Initializrを使用してプロジェクトを生成する場合は、自動生成されたメインアプリケーションクラスファイルを削除してください。このチュートリアルの後半で、このプロジェクトのメインアプリケーションファイルであるMovie Applicationを作成します。プロジェクトに2つのメインアプリケーションクラスが含まれている場合、アプリケーションはUnable to find a single main classエラーで起動に失敗します。

2

Maven プロジェクトの場合は、次の依存関係を pom.xml ファイルに追加します。

<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-hibernate-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency></dependencies>

Gradle プロジェクトの場合は、次の依存関係を build.gradleファイルに追加します。

dependencies { implementation("org.mongodb:mongodb-hibernate-spring-boot-starter:1.0.0")}
3

このスターターには、Hibernate ORM 7.4以降が必要です。Spring Bootは、BOM(Bill of Materials)を通じてHibernate ORMのバージョンをマネージドしており、一部のSpring Boot 4.xリリースでは、スターターが必要とするバージョンよりも古いHibernate ORMバージョンがマネージドされています。マネージドバージョンが7.4より前の場合、アプリケーションの起動に失敗し、Hibernate ORM拡張機能がNoSuchMethodErrorをスローします。

Mavenプロジェクトでマネージドバージョンをオーバーライドするには、pom.xmlファイルに次のプロパティを追加します。

<properties> <hibernate.version>7.4.7.Final</hibernate.version></properties>

Gradle プロジェクトでマネージド バージョンを上書きするには、build.gradle ファイルに次の行を追加します。

ext['hibernate.version'] = '7.4.7.Final'

インストールを完了するには、プロジェクトをリロードまたは同期してください。

1

プロジェクトの src/main/resources ディレクトリで application.properties ファイルを開き、次のプロパティを追加します。

spring.jpa.database-platform=MongoDBspring.mongodb.uri=<connection string>spring.jpa.properties.com.mongodb.hibernate.semantics.nulls=MQL

<connection string> プレースホルダーを、「接続文字列の作成」ステップで作成した sample_mflix 接続文字列に置き換えます。このステップは、「Hibernate ORM 拡張機能の概要」チュートリアルにあります。接続文字列は次の例のようになります。

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

設定したアプリケーションプロパティは、次の処理を行います。

  • spring.jpa.database-platformスターターをアクティブにします。このプロパティを MongoDB に設定しない限り、スターターは非アクティブのままです。

  • spring.mongodb.uriスターターが再利用する MongoClient インスタンスを構成します。スターターは独自のクライアントを作成しません。

  • spring.jpa.properties.com.mongodb.hibernate.semantics.nulls: クエリが使用するnull比較セマンティクスを宣言します。このプロパティは必須であり、サポートされている唯一の値はMQLです。

2

プロジェクトの src/main/java/org/example ディレクトリに Movie.java という名前のファイルを作成し、次のコードを貼り付けます。

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 int year; public Movie() { } public Movie(String title, int year) { this.title = title; this.year = year; } public ObjectId getId() { return id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getYear() { return year; } public void setYear(int year) { this.year = year; }}

このエンティティは、Atlas サンプル データセットの sample_mflix.movies コレクションを表します。スターターはアプリケーションのメインパッケージをスキャンしてエンティティを探すため、エンティティを登録する必要はありません。

3

同じディレクトリに MovieRepository.java という名前のファイルを作成し、次のコードを貼り付けます。

package org.example; import org.bson.types.ObjectId;import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MovieRepository extends JpaRepository<Movie, ObjectId> { List<Movie> findByTitle(String title);}

このスターターはSQL DataSourceなしでSpring Data JPAリポジトリを有効にするため、Spring BootがMovieRepositoryインターフェースを実装します。

4

同じディレクトリに MovieApplication.java という名前のファイルを作成し、次のコードを貼り付けます。

package org.example; import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean; @SpringBootApplicationpublic class MovieApplication { public static void main(String[] args) { SpringApplication.run(MovieApplication.class, args); } @Bean CommandLineRunner run(MovieRepository repository) { return args -> { for (Movie movie : repository.findByTitle("Little Women")) { System.out.println("Title: " + movie.getTitle() + ", Year: " + movie.getYear()); } }; }}

このクラスは、スタートアップ時にリポジトリクエリを実行し、一致する各映画を出力します。

これらの手順を完了すると、アプリケーションのファイル構造は次のようになります。

MongoHibernateSpringQuickstart├── src│ └── main│ ├── java│ │ └── org/example│ │ ├── Movie.java│ │ ├── MovieApplication.java│ │ └── MovieRepository.java│ └── resources│ └── application.properties├── .gitignore├── pom.xml (for Maven projects)└── build.gradle (for Gradle projects)

IDE で MovieApplication クラスを実行します。出力は次のようになります。

Title: Little Women, Year: 1949Title: Little Women, Year: 1994

アプリケーションが起動しない場合は、「スタートアップエラーのトラブルシューティング」を参照して、考えられるスタートアップエラーとトラブルシューティングのヒントを確認してください。

JPAプロパティの設定方法、フィールド命名戦略の変更方法、およびMongoClientのカスタマイズ方法を学ぶには、「Spring Boot Starterの設定」を参照してください。

データをエンティティとしてモデル化する方法を学ぶには、「コレクションを表すエンティティの作成」を参照してください。

データをクエリする方法を学ぶには、「データと交流する」セクションを参照してください。