您的位置:首页 > 其它

hibernate使用annotation配置时将@Id配置到字段field上和get方法上的区别

2010-07-13 18:18 489 查看
原来看hibernate的书时,书上都提到hibernate在延迟加载一个对象时,是生成该对象的一个代理对象。之后如果是读取该对象的id,由于id已经存在,所以直接返回id,只有在读取其他属性时,hibernate才会到数据库里加载该对象。
上午看了一篇文章《EJB 3.0 Annotations with Hibernate Lazy Loading》,里面说到当在field上配置@Id时,如:
@Entity
public class Address {
@Id @GeneratedValue
private long id;

private String town;

public long getId() {
return this.id;
}

public String getTown() {
return this.town;
}
}


此时调用getId()也会加载该对象。
要解决这个问题,需要把@Id注解添加到getter方法上。如:
@Entity
public class Address {
private long id;

private String town;

@Id @GeneratedValue
public long getId() {
return this.id;
}

public String getTown() {
return this.town;
}
}


同时,该文档还提到,hibernate不支持混合field注解和getter方法注解,只能选择其中的一种方式。且如果使用了getter方法注解,该类还必须提供setter方法。
以上内容未经验证,只是阅读之后的记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: