2017-04-06 10 views
0

一般的にSpring BootとJPAの新機能です。私はこのようなフィールド宣言にJPAのアノテーションを追加する例を見てきました:JPAアノテーションをフィールドとゲッターに追加するかどうかの違いは?

@Entity 
public class Fizz { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    // other fields 

    public Fizz(Long id) { 
     super(); 

     setId(id); 
    } 

    // setter defined here 

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

...だけでなく、このようなゲッターに同じ注釈を置く例:

@Entity 
public class Fizz { 
    private Long id; 

    // other fields 

    public Fizz(Long id) { 
     super(); 

     setId(id); 
    } 

    // setter defined here 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long getId() { 
     return this.id; 
    } 
} 

私はそれらが意味的に同等であるかどうか、またはあなたが他のものを重複して選択する異なるユースケースがあるかどうか疑問に思う。

@Canonical 
@Entity 
class Fizz { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    Long id 
} 

任意のアイデア:あなたは、通常のゲッターを定義していないところ、私は実際にGroovyで私の春ブーツ/ JPAのアプリを書いているので、私は聞いて?前もって感謝します!

+0

あなたはまだ明確化をお探しですか?そうでない場合、あなたは下の答えを受け入れることを検討してupvoteことができますか? –

答えて

1

デフォルトでは、JPAプロバイダはエンティティフィールドの値にアクセスし、エンティティのJavaBeanプロパティアクセサ(getter)メソッドとミューテータ(setter)メソッドを使用して、これらのフィールドをデータベース列 にマップします。そのため、エンティティ内のプライベートフィールドの名前とタイプは、JPAとは関係ありません。 その代わりに、JPAはJavaBeanプロパティ・アクセサの名前と戻り値の型だけを で調べます。 @javax.persistence.Access注釈を使用してこれを変更することができます。これにより、JPAプロバイダが使用するアクセス方法 を明示的に指定できます。

@Entity 
@Access(AccessType.FIELD) 
public class SomeEntity implements Serializable 
{ 
... 
} 

アクセスタイプの列挙型で使用可能なオプションは、PROPERTY(デフォルト)とFIELDです。 PROPERTYを使用すると、プロバイダはJavaBeanプロパティメソッドを使用してフィールド値を取得および設定します。 FIELD プロバイダは、インスタンスフィールドを使用してフィールド値を取得および設定します。ベストプラクティスとして、 をデフォルトに固定し、別の理由がない限りJavaBeanプロパティを使用するだけです。

これらのプロパティ注釈は、プライベートフィールドまたはパブリックアクセサメソッドのいずれかに配置できます。 AccessType.PROPERTY(デフォルト)を使用し、JavaBean アクセサの代わりにプライベートフィールドに注釈を付ける場合、フィールド名はJavaBeanのプロパティ名と一致する必要があります。ただし、JavaBeanアクセサに注釈を付ける場合は、名前に という名前を付ける必要はありません。同様に、AccessType.FIELDと をフィールドの代わりにJavaBeanアクセサに注釈を付ける場合は、フィールド名もJavaBean のプロパティ名と一致する必要があります。この場合、フィールドに注釈を付けると一致する必要はありません。 は、一貫しており、AccessType.PROPERTYのJavaBeanアクセサに注釈を付け、 AccessType.FIELDのフィールドに注釈を付けるのが最善です。

JPAプロパティ注釈とJPAフィールド注釈を同じエンティティに混同しないでください。 そうすると、不特定の動作が発生し、エラーが発生する可能性が非常に高い になります。

関連する問題