自从我一直在使用hibernate一段时间以来,这是一个非常愚蠢的问题但是我遇到了一个特殊情况,突然意识到我不确定hibernate如何填充数据库实体.
public class User {
...
@Column
private String name;
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
当hibernate创建User的新实例时(从DB加载时),它将如何填充该实例的属性名称?我总是假设hibernate会为此调用setName但是我遇到的情况让我怀疑hibernate忽略了setter并且(使用反射)直接设置字段的值?
谢谢,
Stijn
access属性允许您控制Hibernate在运行时访问属性的方式.默认情况下,Hibernate将调用属性get/set对.如果指定access ="field",Hibernate将绕过get/set对并使用反射直接访问该字段.您可以通过命名实现接口org.hibernate.property.PropertyAccessor的类来指定您自己的属性访问策略.
access="field|property|ClassName"
Run Code Online (Sandbox Code Playgroud)
Hibernate注释和JPA使用Annotation的放置来确定要使用的访问类型.在上面提供的示例中,它将使用字段访问.
根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性.EJB3规范要求您对要访问的元素类型声明注释,即如果使用属性访问则使用getter方法,如果使用字段访问,则为字段.应避免在两个字段和方法中混合注释.