Javax.persistence Аннотации на поле, геттер или сеттер?
В настоящее время я изучаю Hibernate и Java Persistence API.
У меня есть класс @Entity и нужно применять аннотации к различным полям. Я включил в код ниже все три места, куда они могли пойти.
Должен ли я применять их к самому полю, получателю или сеттеру? И какова семантическая разница, если таковая имеется, между этими тремя параметрами.
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;
}
}
Ответы
Ответ 1
Вам нужно выбирать между полем и геттером. Аннотации по сеттерам не поддерживаются. И все аннотации должны быть на полях, или все они должны быть на геттерах: вы не можете смешивать оба подхода (за исключением случаев, когда вы используете @AccessType
аннотация).
Относительно того, какой из них предпочтительнее, ответ: это зависит. Я предпочитаю доступ к полю, но YMMV, и есть ситуации, когда доступ к свойствам предпочтительнее. См. Hibernate Annotations - что лучше, доступ к полям или свойствам?.
Ответ 2
Вы должны помещать аннотации только для поля или только для getter
@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