パッケージ jakarta.data.metamodel

アノテーションインターフェース StaticMetamodel


@DocumentedSE @RetentionSE(RUNTIMESE) @TargetSE(TYPESE) public @interface StaticMetamodel

エンティティの静的メタモデルとして機能するクラスにアノテーションを付け、エンティティ属性名や属性の Sort インスタンスなどの関連オブジェクトへの型安全なアクセスを可能にします。メタモデルクラスには、エンティティクラスの永続フィールドに対応する 1 つ以上の public static フィールドが含まれます。これらの各フィールドの型は、StringSEAttribute、またはこのパッケージで定義されている Attribute のサブインターフェースのいずれかである必要があります。

Jakarta Data は、静的メタモデルクラスに対して次の規則を定義します。

  • メタモデルクラスは、インターフェースまたは具象クラスにすることができます。
  • 静的メタモデルクラスの名前は、アンダースコア (_) とそれに続くエンティティクラス名で構成する必要があります。
  • String 型のフィールドには、すべて大文字で名前を付ける必要があります。
  • Attribute 型のフィールドには、小文字または大文字と小文字の混合で名前を付ける必要があります。

例: 次のエンティティの場合

 @Entity
 public class Person {
     @Id
     public long ssn;

     @Embedded
     public Name name;

     public int yearOfBirth;
 }

 @Embeddable
 public class Name {
     public String first;
     public String last;
 }
 

アプリケーションプログラマーは、次のように静的メタモデルを定義することができます。

 @StaticMetamodel(Person.class)
 public interface _Person {
     String SSN = "ssn";
     String NAME = "name";
     String NAME_FIRST = "name.first";
     String NAME_LAST = "name.last";
     String YEAROFBIRTH = "yearOfBirth";

     SortableAttribute<Person> ssn = new SortableAttributeRecord<>(SSN);
     Attribute<Person> name = new AttributeRecord<>(NAME);
     TextAttribute<Person> name_first = new TextAttributeRecord<>(NAME_FIRST);
     TextAttribute<Person> name_last = new TextAttributeRecord<>(NAME_LAST);
     SortableAttribute<Person> yearOfBirth = new SortableAttributeRecord<>(YEAROFBIRTH);
 }
 

そして、それを使用して、型安全な方法でエンティティ属性を参照します。

 Order<Person> order =
         Order.by(_Person.yearOfBirth.desc(),
                  _Person.name_last.asc(),
                  _Person.name_first.asc(),
                  _Person.ssn.asc());
 

あるいは、アノテーションプロセッサーは、コンパイル時にエンティティの静的メタモデルクラスを生成する場合があります。生成されたクラスには、@Generated アノテーションを付ける必要があります。フィールドは静的に初期化することも、システム初期化中にプロバイダーによって初期化することもできます。最初のケースでは、フィールドは final として宣言され、メタモデルクラスはインターフェースにすることができます。2 番目のケースでは、フィールドは非 final および volatile として宣言され、メタモデルクラスは具象クラスにする必要があります。

複数の Jakarta Data プロバイダーが同じエンティティ型に対してリポジトリを提供する場合、Jakarta Data プロバイダーがそのエンティティの静的メタモデルクラスのフィールドを初期化しようとする順序は保証されません。

  • 必須定数のサマリー

    必須要素
    修飾子と型
    必須要素
    説明
    エンティティクラス。
  • 要素の詳細

    • value

      ClassSE<?> value
      エンティティクラス。
      戻り値:
      エンティティクラス。