hibernate如何填充实体

Sti*_*ens 2 hibernate

自从我一直在使用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

Dam*_*ash 5

access属性允许您控制Hibernate在运行时访问属性的方式.默认情况下,Hibernate将调用属性get/set对.如果指定access ="field",Hibernate将绕过get/set对并使用反射直接访问该字段.您可以通过命名实现接口org.hibernate.property.PropertyAccessor的类来指定您自己的属性访问策略.

access="field|property|ClassName"
Run Code Online (Sandbox Code Playgroud)

资源


cod*_*ark 5

Hibernate注释和JPA使用Annotation的放置来确定要使用的访问类型.在上面提供的示例中,它将使用字段访问.

来自Hibernate Annotations文档:

根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性.EJB3规范要求您对要访问的元素类型声明注释,即如果使用属性访问则使用getter方法,如果使用字段访问,则为字段.应避免在两个字段和方法中混合注释.