違いは何ですか @Column
および@Basic
JPAの注釈?一緒に使用できますか? べき一緒に使用しますか?または、それらの1つで十分ですか?
@Basic
は、属性が永続化され、標準マッピングが使用されることを示します。これには、属性を遅延ロードするかどうか、およびNULL可能かどうかを指定できるパラメーターがあります。
@Column
を使用すると、属性を永続化するデータベース内の列の名前を指定できます。
どちらかを指定せずに指定すると、賢明なデフォルトの動作が得られるため、一般的には、特別な場合を除いて1つだけを使用します。
したがって、属性の遅延読み込みが必要で、列名を指定するには
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
デフォルトの非遅延動作を必要とする場合は、@Column
で十分でしょう。
@ djna's answer に加えて、@Basic
を@OneToMany
、@ManyToOne
および@ManyToMany
と比較する必要があることに注意してください。これらのプロパティのいずれか1つのみをプロパティに指定できます。
@Column
および@JoinColumn
をこれらのいずれかとともに指定して、データベース列のプロパティを説明できます。
これらは一緒に使用できる注釈の2つのセットですが、一度に使用できるのは各セットの1つの注釈のみです。
Basicはプリミティブフィールド用に設計されていることに注意してください
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
基本的な属性とは、属性クラスがString、Number、Date、またはプリミティブなどの単純なタイプの属性です。基本属性の値は、データベース内の列値に直接マップできます。
サポートされるタイプと変換は、JPA実装とデータベースプラットフォームによって異なります。データベースタイプに直接マップしないタイプを使用する基本属性は、バイナリデータベースタイプにシリアル化できます。
JPAで基本属性をマッピングする最も簡単な方法は、何もしないことです。他の注釈がなく、他のエンティティを参照しない属性は、自動的に基本としてマップされ、基本タイプでない場合はシリアル化されます。属性の列名はデフォルトで設定され、属性名と同じ名前が大文字になります。