hibernate如何填充实体

时间:2011-01-04 16:59:36

标签: hibernate

非常愚蠢的问题,因为我已经使用hibernate一段时间了但是我遇到了一个特殊情况,突然意识到我不确定hibernate如何填充数据库实体。

public class User {
    ...
    @Column
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}

当hibernate创建User的新实例时(从DB加载时),它将如何填充该实例的属性名称?我总是假设hibernate会为此调用setName但是我遇到的情况让我怀疑hibernate忽略了setter并且(用反射)直接设置了字段的值?

感谢,
斯泰恩

3 个答案:

答案 0 :(得分:5)

  

访问属性允许您   控制Hibernate如何访问   运行时的属性。默认情况下,   Hibernate将调用该属性   获取/设置对。如果你指定   access =“field”,Hibernate会绕过   获取/设置对并访问该字段   直接使用反射。您可以   指定你自己的财产策略   通过命名一个类来访问   实现接口   org.hibernate.property.PropertyAccessor。

access="field|property|ClassName"

Source

答案 1 :(得分:5)

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

来自Hibernate Annotations documentation

  

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

答案 2 :(得分:1)

hibernate默认使用反射属性访问 如果您需要更多详细信息,我建议您查看系统安全策略(SecurityManager)