hibernate如何填充实体
非常愚蠢的问题,因为我已经使用hibernate一段时间了,但我遇到了一个特殊情况,突然意识到我不确定hibernate是如何填充DB实体的hibernate如何填充实体,hibernate,Hibernate,非常愚蠢的问题,因为我已经使用hibernate一段时间了,但我遇到了一个特殊情况,突然意识到我不确定hibernate是如何填充DB实体的 public class User { ... @Column private String name; public void setName(String name) { this.name = name; } } 当hibernate创建用户的新实例时(从DB加载时),它将如何填充该实例的属
public class User {
...
@Column
private String name;
public void setName(String name) {
this.name = name;
}
}
当hibernate创建用户的新实例时(从DB加载时),它将如何填充该实例的属性名?我一直认为hibernate会为此调用setName,但我现在遇到的情况让我怀疑hibernate会忽略setter并(通过反射)直接设置字段的值
谢谢,斯蒂金 “访问”属性允许您 控制Hibernate如何访问 运行时的属性。默认情况下, Hibernate将调用该属性 获取/设置一对。如果您指定 access=“field”,Hibernate将绕过 获取/设置对并访问字段 直接使用反射。你可以 指定您自己的财产战略 通过命名一个 实现接口 org.hibernate.property.PropertyAccessor
默认情况下,hibernate使用反射属性访问
如果您想了解更多详细信息,我建议查看系统安全策略(SecurityManager)Hibernate注释和JPA使用注释的位置来确定要使用的访问类型。在上面提供的示例中,它将使用字段访问 从: 根据您是注释字段还是注释方法,Hibernate使用的访问类型将是字段还是属性。EJB3规范要求您在将被访问的元素类型上声明注释,即如果使用属性访问,则声明getter方法;如果使用字段访问,则声明字段。应避免在字段和方法中混合注释
没有愚蠢的问题。没有,但有些人会因为问这些问题而感到愚蠢:-)你基于什么“Hibernate默认使用反射属性访问”?所有3个答案都非常有用。我将注释移动到getter,这解决了我面临的问题。还要感谢Vash和Mat。只需补充一条评论;只有当我将所有注释移到getter,而不仅仅是我需要的注释时,它才起作用。最后,我将所有注释移回字段,并将@Access(AccessType.PROPERTY)添加到需要使用getter/Setter的字段中。
access="field|property|ClassName"