2016-07-26 14 views
2

は、誰もがJPAで@Transientアノテーションは、同様方法 @targetた理由を例を使って説明できますか?JPA TransientアノテーションのメソッドがTargetにあるのはなぜですか?

は、私はドキュメントhttp://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html

@Target(値= {メソッド、フィールド})事前に

感謝を参照しています!

+0

それは方法でそれを許可しても意味がどのよう – Saravana

+0

を持っているなぜあなたはgetterメソッドまたはフィールドによって一時属性にアクセスすることができ、それがですか?フィールドだけで十分ではないはずですか? – user2906555

+0

いいえ、リフレクションメソッドまたはゲッタメソッドを使用してフィールドにアクセスするようにプログラムできます。 – Saravana

答えて

0

JPAエンティティでは、フィールドまたはメソッド(ゲッタ)に注釈を付けることができます。 @Id注釈は、フィールド上@Idを置くならば、すべての注釈がフィールド上に行く必要がありますが、あなたがそれを上に置く場合は、例えば、@Id Long getId()その後、他の注釈が従うべき意味、これを指示します。そのため、@Transientもメソッドに含めることができます。例えば

、あなたがこの

@Id 
private Long id; 

@Transient 
private String someTransientField; 

private Long getId() { 
    return this.id; 
} 

private String getSomeTransientField() { 
    return this.someTransientField; 
} 

を持っている場合someTransientFieldは一時的なものとして扱われます。しかし、@Idがフィールドにとどまり、@Transientprivate String getSomeTransientField()に移動すると、someTransientFieldはフィールドにあるので、@Idがフィールドにあるので、永続的として扱われます。したがって、他のすべての注釈もフィールドにあると考えられます。

だから@Transientが法に働くだろう場合は、この

private Long id; 

private String someTransientField; 

@Id 
private Long getId() { 
    return this.id; 
} 

@Transient 
private String getSomeTransientField() { 
    return this.someTransientField; 
} 
+0

@Transientがフィールドではなくメソッドで使用する方が適している例を手伝ってもらえますか? – user2906555

+0

私は例を追加しました。 –

+0

それは事を明確にします。答えをありがとう。 – user2906555

0

@Target注釈は、あなたがなど、この注釈を使用することができ、例えば、クラス、フィールド、メソッドを定義することができますされているプログラム要素を示し、注釈付き注釈タイプのインスタンスを使用して注釈を付けることができます。

@Target(value={METHOD,FIELD})は、アノテーションはタイプ(メソッドとフィールド)の上でのみ使用できることを意味します。ターゲットをすべて一緒に残しておくと、クラス、メソッド、およびフィールドの両方でアノテーションを使用できます。 JPA @Target

は - アノテーションに適用することができるJava要素の種類を制限する別の注釈@Transientをマーク。

0

それは注釈がFieldまたはmethod上で使用することができることを意味します。

フィールドが注釈されている場合、フィールドは、リフレクションを使用してアクセスされます。

方法(ゲッタ)が注釈されている場合、ゲッターメソッドがアクセスするために使用されます。

関連する問題