1. 概要

このクイックチュートリアルでは、JPA @Basicアノテーションについて説明します。 また、@Basic@ColumnJPAアノテーションの違いについても説明します。

2. 基本タイプ

JPAは、エンティティの永続フィールドとしてさまざまなJavaデータ型をサポートします。これは、基本型と呼ばれることがよくあります。

基本タイプはデータベースの列に直接マップされます。これらには、Javaプリミティブとそのラッパークラス、 String java.math.BigInteger が含まれます。 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 アノテーションには、オプションフェッチの2つの属性があります。 それぞれを詳しく見ていきましょう。

オプションの属性は、マークされたフィールドまたはプロパティがnullを許可するかどうかを定義するブールパラメータです。デフォルトはtrueです。 したがって、フィールドがプリミティブ型でない場合、基になる列はデフォルトでnull許容であると見なされます。

The フェッチ属性は列挙型のメンバーを受け入れますフェッチ 、 どれのマークされたフィールドまたはプロパティを遅延ロードするか、熱心にフェッチするかを指定します。 デフォルトは FetchType.EAGER 、ただし、に設定することで遅延読み込みを許可できます FetchType.LAZY。

遅延読み込みは、大きな Serializable オブジェクトが基本タイプとしてマップされている場合にのみ意味があります。その場合、フィールドアクセスコストがかなり高くなる可能性があります。

HibernateでのEager/ Lazyローディングをカバーする詳細なチュートリアルがあり、トピックをさらに深く掘り下げます。

ここで、Coursenamenullsを許可せず、そのプロパティも遅延ロードしたいとします。 次に、Courseエンティティを次のように定義します。

@Entity
public class Course {
    
    @Id
    private int id;
    
    @Basic(optional = false, fetch = FetchType.LAZY)
    private String name;
    ...
}

オプションのデフォルト値から逸脱してパラメーターをフェッチする場合は、@Basicアノテーションを明示的に使用する必要があります。 必要に応じて、これらの属性のいずれかまたは両方を指定できます。

5. JPA @Basic@Column

@Basicアノテーションと@Columnアノテーションの違いを見てみましょう。

  • @Basic アノテーションの属性はJPAエンティティに適用され、@Columnの属性はデータベース列に適用されます
  • @Basicアノテーションのoptional属性は、エンティティフィールドをnullにすることができるかどうかを定義します。 一方、@Columnアノテーションのnullable属性は、対応するデータベース列をnullにできるかどうかを指定します。
  • @Basic を使用して、フィールドを遅延ロードする必要があることを示すことができます
  • @Column アノテーションを使用すると、マップされたデータベース列のnameを指定できます。

6. 結論

この記事では、JPAの@Basicアノテーションをいつどのように使用するかを学びました。 また、@Columnアノテーションとの違いについても説明しました。

いつものように、コード例はGithubで入手できます。