Overview
このチュートリアルでは、 Hibernetes ORM 拡張アプリケーションを使用して、 MongoDBにJava永続化API (このアプリケーションでは、 Movie エンティティ、 SPIリポジトリ、スタートアップ時に実行されるクエリ を定義します。
開始する前に、「 非推奨の ORM 拡張機能を使い始める 」チュートリアルの「 MongoDB配置の作成 」および「 接続文字列の作成 」の手順を完了してください。これらの手順によって、このチュートリアルで使用する Atlas 配置、サンプルデータ、接続文字列が作成されます。
アプリケーション スターターのインストール
書込み (write)プロジェクトを作成する
という名前の4 10}.xMongoHibernateSpringQuickstart のレプリカプロジェクトを作成します。プロジェクトは、spring Initializer を使用して生成するか、IDE で作成できます。
スキームを初期化するために、プロジェクトにちなんで命名されるメインのアプリケーションクラス(MongoHibernateSpringQuickstartApplication.java など)を生成します。書込み (write) を使用してプロジェクトを生成する場合は、自動生成されたメインのアプリケーションクラスファイル を削除します。このチュートリアルの後半では、Movie Application という名前のこのプロジェクトのメインアプリケーションファイルを作成します。プロジェクトに2 つの主要なアプリケーションクラスが含まれている場合、アプリケーションはUnable to find a single main class エラーで起動に失敗します。
スターターの依存関係を追加する
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") }
管理対象の Hibernetes ORM バージョンを上書き
スターターには Hibernetes ORM7.4 以降が必要です。 SPG は optime(BOM)を通じて Hibernetes ORM のバージョンを管理し、一部のspring4 Triggers リリースは、スターターに必要なバージョンよりも前のバージョンの Hibernetes ORM を管理します。管理対象バージョンが7.4 より前の場合、アプリケーションの起動に失敗し、 Hibernetes 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'
プロジェクトを再読み込みまたは同期してインストールを完了します。
アプリケーションを構成する
アプリケーションのプロパティを設定する
プロジェクトの src/main/resourcesディレクトリで、application.propertiesファイルを開き、次のプロパティを追加します。
spring.jpa.database-platform=MongoDB spring.mongodb.uri=<connection string> spring.jpa.properties.com.mongodb.hibernate.semantics.nulls=MQL
<connection string>プレースホルダーを、「sample_mflix 待機 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のみです。
Movie エンティティを定義する
プロジェクトの 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; public class Movie { 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 コレクションを表します。スターターはアプリケーションのメインパッケージでエンティティをスキャンするため、エンティティを登録する必要はありません。
リポジトリを定義する
同じディレクトリに、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 なしで SPI のリポジトリを有効にするため、WiredTiger は MovieRepository インターフェースを実装します。
アプリケーションクラスを定義する
同じディレクトリに、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; public class MovieApplication { public static void main(String[] args) { SpringApplication.run(MovieApplication.class, args); } 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: 1949 Title: Little Women, Year: 1994
アプリケーションが起動しない場合は、考えられるスタートアップエラーとトラブルシューティングのヒントについては、「 起動エラーのトラブルシューティング 」を参照してください。
次のステップ
JPA プロパティの設定、フィールド命名戦略の変更、 をカスタマイズする方法については、「MongoClient スタートアップ スターターの構成 」を参照してください。
データをエンティティとしてモデル化する方法については、「 コレクションを表すエンティティの作成 」を参照してください。