私は現在、HibernateとJava PersistenceAPIを学習しています。
@Entityクラスがあり、さまざまなフィールドにアノテーションを適用する必要があります。私は彼らが行くことができる3つの場所すべての下のコードに含めました。
それらをフィールド自体、ゲッター、またはセッターに適用する必要がありますか?そして、もしあれば、これら3つのオプションの間に意味上の違いは何ですか。
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
@Entity
@Table(name = "song")
public class Song {
// Annotations should only be applied to one of the below
@Id
@Column(name="id", unique=true, nullable=false)
private int id;
@Id
@Column(name="id", unique=true, nullable=false)
public int getId() {
return id;
}
@Id
@Column(name="id", unique=true, nullable=false)
public void setId(int id) {
this.id = id;
}
}
フィールドとゲッターのどちらかを選択する必要があります。セッターの注釈はサポートされていません。また、すべての注釈はフィールド上にあるか、すべてゲッター上にある必要があります。両方のアプローチを混在させることはできません( @AccessType
注釈)。
どちらが優先されるかに関して、答えは次のとおりです。それは状況によって異なります。私はフィールドアクセスを好みますが、YMMVであり、プロパティアクセスが好ましい場合があります。 Hibernate Annotations-フィールドまたはプロパティへのアクセスのどちらが良いですか? を参照してください。
フィールドまたはゲッターのみに注釈を付ける必要があります
@Id
@Column(name="id", unique=true, nullable=false)
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
または
private int id;
@Id
@Column(name="id", unique=true, nullable=false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
そして、すべてのフィールド/プロパティに対して同じように。フィールドのすべての注釈またはgetterのすべての注釈