5

jpa アノテーションがフィールドまたは getter メソッドに適用される理由。セッターメソッドに注釈を適用しようとすると、コンパイラーがエラーを生成します。コンパイラは setter メソッドのアノテーションを無視するためです。それらの背後にある理由は何ですか?

4

3 に答える 3

13

これがその指定方法です。JPA仕様による

  • フィールドベースのアクセスが使用される場合、エンティティクラスのオブジェクト/リレーショナルマッピングアノテーションはインスタンス変数にアノテーションを付け、永続性プロバイダーランタイムはインスタンス変数に直接アクセスします。トランジェントアノテーションが付けられていないすべての非トランジェントインスタンス変数は永続的です。
  • プロパティベースのアクセスが使用される場合、エンティティクラスのオブジェクト/リレーショナルマッピングアノテーションはgetterプロパティアクセサー[7]にアノテーションを付け、永続プロバイダーランタイムはプロパティアクセサーメソッドを介して永続状態にアクセスします。Transientアノテーションが付けられていないすべてのプロパティは永続的です。
  • マッピング注釈は、一時的または一時的であるフィールドまたはプロパティに適用してはなりません。

2つのオプションがあります。フィールドレベルのアノテーションまたはプロパティ(getterメソッド)アノテーションのいずれかを使用します。3番目のオプションはありません。

于 2012-12-25T06:26:50.067 に答える
2

オブジェクトの場合、プロパティに直接アクセスする方法と、フィールドに直接アクセスする方法と、間接的にゲッターにアクセスする方法は2つしかありません。

エンティティBeanの場合、アノテーションはプロパティを列にマップする方法を指定し、JPAはエンティティのこれらのステータスにアクセスする必要があるため、これがフィールドに直接またはゲッターにアノテーションを配置する最も直感的な方法だと思います。

于 2012-12-25T06:43:17.343 に答える
1

getter にアノテーションを付けると、JPA は getter を介してプロパティにアクセスします。setter にアノテーションを付ける必要はありません。

于 2012-12-25T06:18:18.613 に答える