字段、getter或setter上的javax.persistence注释?
我目前正在学习Hibernate和Java持久性API 我有一个@Entity类,需要对各个字段应用注释。我在下面的代码中包含了他们可以去的所有三个地方 我应该将它们应用于字段本身,getter还是setter?这三个选项之间的语义差异是什么字段、getter或setter上的javax.persistence注释?,java,hibernate-mapping,Java,Hibernate Mapping,我目前正在学习Hibernate和Java持久性API 我有一个@Entity类,需要对各个字段应用注释。我在下面的代码中包含了他们可以去的所有三个地方 我应该将它们应用于字段本身,getter还是setter?这三个选项之间的语义差异是什么 import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Id; @Entity @Table(name = "song") pub
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;
}
}
您必须在field和getter之间进行选择。不支持setter上的批注。所有注释都应该在字段上,或者都应该在getter上:不能将这两种方法混合使用(除非使用注释)
关于哪一个更合适,答案是:这要看情况而定。我更喜欢现场访问,但YMMV,在某些情况下,更喜欢财产访问。请参阅。您必须仅为字段或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;
}
或
对于所有字段/属性,使用相同的方式。不支持字段的所有注释或getter的所有注释setter上可能重复的注释,因为使用setter的反射来确定字段的类类型更加困难。对于getter,您所要做的就是检查方法的返回类型。但对于setter,如果要向其传递多个参数,该怎么办?还发现,您可以将其用于getId(),而无需从中获取整个对象:Hibernate中的延迟加载-Hibernate的延迟加载实现总是在调用该代理上的任何方法时初始化延迟代理。唯一的例外是使用属性访问时使用@Id注释注释的方法。但是当您使用字段访问时,没有这样的方法,Hibernate甚至在调用返回实体标识的方法时也会初始化代理。
@Id
@Column(name="id", unique=true, nullable=false)
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}