SpringJPA@Embeddedおよび@EmbeddedId
1. 概要
このチュートリアルでは、@EmbeddedIdアノテーションと「findBy」メソッドを使用して複合キーベースのJPAエンティティをクエリする方法について説明します。
したがって、は@EmbeddeIdおよび@Embeddableアノテーションを使用して、JPAエンティティの複合キーを表します。 また、目標を達成するには、Spring JpaRepositoryを使用する必要があります。
部分的な主キーによるオブジェクトのクエリに集中します。
2. @Embeddableおよび@EmbeddedIdの必要性
ソフトウェアでは、テーブルのエントリを定義するために複合主キーが必要な場合に、多くのユースケースに遭遇します。 複合主キーは、複数の列を使用してテーブル内の行を一意に識別するキーです。
クラスで@Embeddableアノテーションを使用して、SpringDataで複合主キーを表します。 次に、このキーは、@Embeddableタイプのフィールドで@EmbeddedIdアノテーションを使用して、複合主キーとしてテーブルの対応するエンティティクラスに埋め込まれます。
3. 例
book テーブルについて考えてみます。ここで、 book レコードには、authorとnameで構成される複合主キーがあります。 主キーの一部で本を検索したい場合があります。 たとえば、ユーザーが特定の著者だけが本を検索したい場合があります。 JPAを使用してこれを行う方法を学習します。
主なアプリケーションは、 @EmbeddableBookIdと@EntityBookと@EmbeddedIdBookId。で構成されます。
3.1. @Embeddable
このセクションでBookIdクラスを定義しましょう。 authorとnameは、一意の BookId を指定します—クラスは Serializable であり、equalsとの両方を実装しますX153X] hashCode メソッド:
@Embeddable
public class BookId implements Serializable {
private String author;
private String name;
// standard getters and setters
}
3.2. @Entityおよび@EmbeddedId
Book エンティティには、 @EmbeddedId BookIdおよびbookに関連するその他のフィールドがあります。 BookId は、Bookエンティティに複合キーがあることをJPAに通知します。
@Entity
public class Book {
@EmbeddedId
private BookId id;
private String genre;
private Integer price;
//standard getters and setters
}
3.3. JPAリポジトリとメソッドの命名
JpaRepositoryをエンティティBookおよびBookIdで拡張して、JPAリポジトリー・インターフェースをすばやく定義しましょう。
@Repository
public interface BookRepository extends JpaRepository<Book, BookId> {
List<Book> findByIdName(String name);
List<Book> findByIdAuthor(String author);
}
id 変数のフィールド名の一部を使用して、SpringDataクエリメソッドを派生させます。 したがって、JPAは部分的な主キークエリを次のように解釈します。
findByIdName -> directive "findBy" field "id.name"
findByIdAuthor -> directive "findBy" field "id.author"
4. 結論
JPAを使用すると、複合キーを効率的にマッピングし、派生クエリを介してそれらをクエリできます。
この記事では、部分IDフィールド検索を実行する小さな例を見ました。 複合主キーを表す@Embeddableアノテーションと、エンティティに複合キーを挿入する@EmbeddedIdアノテーションを確認しました。
最後に、JpaRepository findBy 派生メソッドを使用して、部分IDフィールドで検索する方法を確認しました。
いつものように、このチュートリアルのサンプルコードは、GitHubからで入手できます。