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