web-dev-qa-db-ja.com

Java Persistence / JPA:@Column vs @Basic

違いは何ですか @Columnおよび@Basic JPAの注釈?一緒に使用できますか? べき一緒に使用しますか?または、それらの1つで十分ですか?

113
Hosam Aly
  • @Basicは、属性が永続化され、標準マッピングが使用されることを示します。これには、属性を遅延ロードするかどうか、およびNULL可能かどうかを指定できるパラメーターがあります。

  • @Columnを使用すると、属性を永続化するデータベース内の列の名前を指定できます。

どちらかを指定せずに指定すると、賢明なデフォルトの動作が得られるため、一般的には、特別な場合を除いて1つだけを使用します。

したがって、属性の遅延読み込みが必要で、列名を指定するには

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")

デフォルトの非遅延動作を必要とする場合は、@Columnで十分でしょう。

142
djna

@ djna's answer に加えて、@Basic@OneToMany@ManyToOneおよび@ManyToManyと比較する必要があることに注意してください。これらのプロパティのいずれか1つのみをプロパティに指定できます。

@Columnおよび@JoinColumnをこれらのいずれかとともに指定して、データベース列のプロパティを説明できます。

これらは一緒に使用できる注釈の2つのセットですが、一度に使用できるのは各セットの1つの注釈のみです。

47
Hosam Aly

Basicはプリミティブフィールド用に設計されていることに注意してください

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

基本的な属性とは、属性クラスがString、Number、Date、またはプリミティブなどの単純なタイプの属性です。基本属性の値は、データベース内の列値に直接マップできます。

サポートされるタイプと変換は、JPA実装とデータベースプラットフォームによって異なります。データベースタイプに直接マップしないタイプを使用する基本属性は、バイナリデータベースタイプにシリアル化できます。

JPAで基本属性をマッピングする最も簡単な方法は、何もしないことです。他の注釈がなく、他のエンティティを参照しない属性は、自動的に基本としてマップされ、基本タイプでない場合はシリアル化されます。属性の列名はデフォルトで設定され、属性名と同じ名前が大文字になります。

21
Gab