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

CRUD 操作を実行

このガイドでは、 Hibernetes ORM 用のMongoDB拡張機能 を使用して、 MongoDBコレクションに対して作成、読み取り、アップデート、および削除( CRUD )操作を実行する方法を学習します。

このガイドの例では、Movie sample_mflix.moviesAtlasサンプルデータセットの コレクションを表す エンティティを使用します。Movie エンティティには次の定義があります。

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

Hibernetes ORM 用のMongoDB拡張機能を使用してこのMongoDBサンプルコレクションと交流するJavaアプリケーションを作成する方法については、使い始めるチュートリアルを参照してください。

重要

永続性コンテキスト

Hibernetes ORM を有効にしてデータベースを操作するには、 Hibernetes Session または Java 永続性 EntityManager を使用して永続性コンテキスト内で操作を実行する必要があります。 MongoDBデータを変更し、データの整合性を維持するには、トランザクション内で書込み操作も実行する必要があります。

このガイドの例を実行する前に、次のコードのような永続性コンテキストとトランザクションマネジメントコードをアプリケーションに追加していることを確認してください。

var sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// ... Perform CRUD operations here
tx.commit();
session.close();
sf.close();

セッションを使用するには、HibernateUtil.java を構成するSessionFactory ファイルを作成する必要があります。詳細については、「 使い始める 」チュートリアルの「 アプリケーションを構成する 」の手順を参照してください。

// Replace <persistence unit> with the name of your persistence unit in the persistence.xml file
EntityManagerFactory emf = Persistence.createEntityManagerFactory("<persistence unit>");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
// ... Perform CRUD operations here
entityManager.getTransaction().commit();
entityManager.close();
emf.close;

EntityManagerpersistence.xmlを使用するには、永続性ユニットを宣言する ファイルを作成する必要があります。詳しくは、 Hibernetes ORM ドキュメントの「 JPA 標準 API を使用するチュートリアル 」を参照してください。

ドキュメントをコレクションに挿入するには、新しい エンティティインスタンスを作成します。次に、このインスタンスを次のメソッドの引数として渡して、ドキュメントとしてMongoDB コレクションに保存します。

  • org.hibernate.Session.persist(): Hibernetes API を使用して変更をデータベースに適用

  • jakarta.persistence.EntityManager.persist(): Javaリスト 永続化API を使用して変更をデータベースに適用

Tip

エンティティ インスタンスを作成し、それをデータベースに永続化する方法の詳細については、Hibernate ORM ユーザーガイドの「エンティティの永続化」を参照してください。

次の例では、新しい Movie エンティティインスタンスを作成し、persist() メソッドを使用して対応するドキュメントをsample_mflix.moviesコレクションに挿入します。

var myMovie = new Movie();
myMovie.setTitle("Knives Out");
myMovie.setYear(2019);
myMovie.setCast(List.of("Ana de Armas", "Daniel Craig", "Chris Evans"));
myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " +
"unraveling lies as every Thrombey family member becomes a suspect.");
session.persist(myMovie);
var myMovie = new Movie();
myMovie.setTitle("Knives Out");
myMovie.setYear(2019);
myMovie.setCast(List.of("Ana de Armas", "Daniel Craig", "Chris Evans"));
myMovie.setPlot("Detective Benoit Blanc investigates the mysterious death of crime novelist Harlan Thrombey, " +
"unraveling lies as every Thrombey family member becomes a suspect.");
entityManager.persist(myMovie);

コレクションからドキュメントを検索するには 、クエリ条件を createQuery() メソッドに渡します。次の API は両方とも createQuery() メソッドを提供します。

  • 非表示の Session API: 非表示クエリ言語(HQL)構文を使用してクエリを定義する

  • Java 永続性の EntityManager API: クエリを定義するには、HQL のサブセットである Java 永続性クエリ言語(JavaQL)構文 を使用します

Tip

HQL および JQL構文を使用してデータを検索する方法の詳細については、 非表示 ORM クエリガイドの 選択ステートメント を参照してください。

注意

このセクションでは、HQL と JQL を使用してドキュメントを読み取る方法について説明しますが、基準ビルダまたはネイティブ クエリを使用してデータを取得することもできます。詳しくは、次のガイドを参照してください。

クエリ条件に一致するドキュメントを1つだけ検索するには、getSingleResult() メソッドを createQuery() メソッドにチェーンします。次の例では、sample_mflix.moviesコレクションから、title 値が "Boyhood" であるドキュメントを1つ検索します。

var singleResult = session.createQuery("from Movie where title = :t", Movie.class)
.setParameter("t", "Boyhood")
.getSingleResult();
System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014
var singleResult = entityManager.createQuery("select m from Movie m where m.title = :t", Movie.class)
.setParameter("t", "Boyhood")
.getSingleResult();
System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());
Title: Boyhood, Year: 2014

Tip

クエリ構文

HQL および JQL の構文 の詳細については、非表示の ORM ドキュメントの「 非表示のクエリ言語へのガイド 」を参照してください。

次の例では、セッションで createQuery() メソッドを呼び出して、sample_mflix.moviesコレクションからドキュメントを検索します。このコードでは、HQL と JQL を使用して、year の値が 1920 であるドキュメントを返し、その title 値を出力します。

var results = session.createQuery("from Movie where year = :y", Movie.class)
.setParameter("y", 1920)
.getResultList();
results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy
One Week
The Saphead
The Daughter of Dawn
var results = entityManager.createQuery("select m from Movie m where m.year = :y", Movie.class)
.setParameter("y", 1920)
.getResultList();
results.forEach(movie -> System.out.println(movie.getTitle()));
High and Dizzy
One Week
The Saphead
The Daughter of Dawn

コレクション内のドキュメントを変更するには、次の操作を実行します。

  • 1 つのドキュメントを更新 : エンティティの setter メソッドを呼び出して 1 つのエンティティインスタンスのフィールド値を変更し、セッションまたはエンティティ マネージャーを使用して変更を永続化します。

  • 複数のドキュメントを更新:createQuery() createMutationQuery()セッション マネージャーまたはエンティティ マネージャーのexecuteUpdate() メソッドまたは メソッドに更新ステートメントを渡します。次に、 メソッドを呼び出して、変更をデータベースに適用します。

Tip

Hibernetes ORM を使用してデータを変更する方法の詳細については、次のリソースを参照してください。

次の例では、ObjectId 値でドキュメントを検索する。次に、この例ではMovie エンティティの setTitle() メソッドを呼び出して、ドキュメントの title 値を "Jurassic Park I" に更新します。

// Your ObjectId value might differ
Movie movieById = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d"));
movieById.setTitle("Jurassic Park I");
session.persist(movieById);
// Your ObjectId value might differ
Movie movieById = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d"));
movieById.setTitle("Jurassic Park I");
entityManager.persist(movieById);

次の例では、一致するドキュメントの title の値を "The Three Stooges" から "The 3 Stooges" に更新します。次に、この例ではexecuteUpdate() メソッドを呼び出して、データベースに変更を適用します。

var updateResult = session.createMutationQuery(
"update Movie set title = :new where title = :old")
.setParameter("new", "The 3 Stooges")
.setParameter("old", "The Three Stooges")
.executeUpdate();
System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2
var updateResult = entityManager.createQuery(
"update Movie m set m.title = :new where m.title = :old")
.setParameter("new", "The 3 Stooges")
.setParameter("old", "The Three Stooges")
.executeUpdate();
System.out.println("Number of movies updated: " + updateResult);
Number of movies updated: 2

次の操作を実行して、コレクションからドキュメントを削除できます。

  • 1 つのドキュメントを削除します remove()。セッション マネージャーまたはエンティティ マネージャーで、削除するエンティティインスタンスを引数として渡して、 メソッドを呼び出します。

  • 複数のドキュメントを削除する: セッション マネージャーまたはエンティティ マネージャーの createQuery() または createMutationQuery() メソッドに 削除ステートメント を渡します。次に、executeUpdate() メソッドを呼び出して、変更をデータベースに適用します。

Tip

Hibernetes ORM を使用してデータを削除する方法の詳細については、次のリソースを参照してください。

次の例では、ObjectId 値でドキュメントを検索する。次に、この例ではセッションで remove() メソッドを呼び出して、sample_mflix.moviesコレクションから対応するドキュメントを削除します。

// Your ObjectId value might differ
Movie movieToDelete = session.get(Movie.class, new ObjectId("573a1399f29313caabcedc5d"));
session.remove(movieToDelete);
// Your ObjectId value might differ
Movie movieToDelete = entityManager.find(Movie.class, new ObjectId("573a1399f29313caabcedc5d"));
entityManager.remove(movieToDelete);

次の例では、sample_mflix.moviesコレクションから year 値が 1920 であるすべてのドキュメントを削除します。この例ではステートメントを削除するために createMutationQuery() メソッドに渡し、executeUpdate() メソッドを呼び出してデータベースに変更を適用します。

var deleteResult = session.createMutationQuery(
"delete Movie where year = :y")
.setParameter("y", 1920)
.executeUpdate();
System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4
var deleteResult = entityManager.createQuery(
"delete Movie m where m.year = :y")
.setParameter("y", 1920)
.executeUpdate();
System.out.println("Number of movies deleted: " + deleteResult);
Number of movies deleted: 4

Hibernate ORM を使用してCRUD操作を実行する方法の詳細については、次のリソースを参照してください。

  • Hibernetes ORM ユーザーガイドの永続性コンテキスト

  • 非表示 ORM クエリガイドのステートメント タイプ

作成、読み取り、更新、削除するの例をさらに見るには、「 使い始める 」チュートリアルの次のセクションを参照してください。

Hibernate ORM 拡張機能を使用してクエリを実行する方法の詳細については、次のガイドを参照してください。

戻る

エンティティの作成

項目一覧