jpa-basic-annotation
JPA @Basicアノテーション
1. 概要
このクイックチュートリアルでは、JPA _ @ Basic_アノテーションについて説明します。 _ @ Basic_と_ @ Column_ JPAアノテーションの違いについても説明します。
2. 基本タイプ
JPAは、エンティティの永続フィールドとしてさまざまなJavaデータ型をサポートします。これらのデータ型は、基本型として知られています。
*基本型は、データベースの列に直接マップされます。*これらには、Javaプリミティブとそのラッパークラス、_String _、_ java.math.BigInteger_ and_ java.math.BigDecimal_、さまざまな利用可能な日時クラス、列挙、およびその他の型が含まれます。 _java.io.Serializable_を実装します。
Hibernateは、他のORMベンダーと同様に、基本タイプのレジストリを維持し、それを使用して列固有の_org.hibernate.type.Type_を解決します。
3. _ @ Basic_アノテーション
_ @ Basic_アノテーションを使用して、基本型プロパティをマークできます。
@Entity
public class Course {
@Basic
@Id
private int id;
@Basic
private String name;
...
}
言い換えると、*フィールドまたはプロパティの_ @ Basic_アノテーションは、それが基本型であり、Hibernateがその永続性のために標準マッピングを使用する必要があることを意味します。*
*これはオプションの注釈であることに注意してください。*そして、_Course_エンティティを次のように書き換えることができます。
@Entity
public class Course {
@Id
private int id;
private String name;
...
}
*基本型属性に_ @ Basic_注釈を指定しない場合、暗黙的に想定され、この注釈のデフォルト値が適用されます。*
4. _ @ Basic_アノテーションを使用する理由
_ @ Basic_アノテーションには、_optional_と_fetch_の2つの属性があります。 それぞれを詳しく見てみましょう。
-
_optional_属性は、マークされたフィールドまたはプロパティが_null_を許可するかどうかを定義する_boolean_パラメーターです。*デフォルトは_true_です。 したがって、フィールドがプリミティブ型ではない場合、基になる列はデフォルトで_nullable_であると想定されます。
_fetch_属性は、列挙型_Fetch_のメンバーを受け入れます。これは、マークされたフィールドまたはプロパティを遅延ロードするか、または積極的にフェッチするかを指定します。 _
遅延読み込みは、基本的な型としてマップされた大きな_Serializable_オブジェクトがある場合にのみ意味があります。その場合、フィールドアクセスコストはかなり大きくなる可能性があるためです。
link:/hibernate-lazy-eager-loading[HibernateのEager / Lazyロード]をカバーする詳細なチュートリアルがあり、トピックの詳細を確認できます。
今、私たちの_Course_‘s _name_に_nulls_を許可したくなく、そのプロパティも遅延ロードしたいとしましょう。 次に、_Course_エンティティを次のように定義します。
@Entity
public class Course {
@Id
private int id;
@Basic(optional = false, fetch = FetchType.LAZY)
private String name;
...
}
-
optional_および_fetch *パラメータのデフォルト値から逸脱する場合は、_ @ Basic_アノテーションを明示的に使用する必要があります。 必要に応じて、これらの属性のいずれかまたは両方を指定できます。
5. JPA _ @ Basic_ vs _ @ Column_
_ @ Basic_と_ @ Column_アノテーションの違いを見てみましょう。
-
_ @ Basic_アノテーションの属性はJPAエンティティに適用され、
一方、_ @ Column_の属性はデータベース列に適用されます -
_ @ Basic_アノテーションの_optional_属性は、エンティティが
フィールドは_null_でもそうでなくてもかまいません。一方、_ @ Column_アノテーションの_nullable_属性は、対応するデータベース列を_null_にできるかどうかを指定します -
_ @ Basic_を使用して、フィールドを遅延ロードする必要があることを示すことができます
-
_ @ Column_アノテーションにより、マッピングされた_name_を指定できます
データベース列
6. 結論
この記事では、JPAの_ @ Basic_注釈をいつどのように使用するかを学びました。 また、_ @ Column_アノテーションとの違いについても説明しました。
いつものように、コード例はhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/java-jpa[Githubにあります。]