これらすべてのアノテーションの違いを知りたいだけです。なぜこれらを使用しているのか...は、特にフィールドレベルとプロパティレベルでは効果がないことを意味します。
そして、次のような混合レベルの注釈を使用する目的は何ですか?
@Entity
@Access(AccessType.FIELD)
class Employee {
// why their is a field level access
private int id;
// whats the purpose of transient here
@Transient
private String phnnumber;
// why its a property level access
@Access(AccessType.property)
public String getPhnnumber() {
return "1234556";
}
}
このクラスは正確に何を言いますか?
デフォルトでは、アクセスタイプは、識別子注釈を配置する場所(@Id
)によって定義されます。フィールドに配置する場合は AccessType.FIELD
になり、ゲッターに配置する場合は AccessType.PROPERTY
になります。
フィールドではなくプロパティに注釈を付けたい場合があります(たとえば、getterに任意のロジックが必要な場合、またはそのようにしたい場合)。そのような状況では、getterを定義してAccessType.PROPERTY
として注釈を付ける必要があります。
覚えている限り、エンティティフィールド/メソッドのいずれかでAccessType.FIELD
またはAccessType.PROPERTY
を指定する場合、クラス全体のデフォルトの動作を指定する必要があります。そして、それがクラスレベルでAccessType.FIELD
を持つ必要がある理由です(AccessType.FIELD
がデフォルト値ですが)。
phnnumber
フィールドに@Transient
がない場合、JPAは3列のテーブルを提供します。
これは、すべてのエンティティフィールド(id
およびphnnumber
)にAccessType.FIELD
を使用し、同時にゲッター(getPhnnumber()
)にAccessType.PROPERTY
を使用するためです。 )。
電話番号はデータベースで2回マッピングされます。
したがって、@Transient
注釈が必要です-これは、エンティティがfieldの値を基礎となるストレージに保存しないが、 getter。