【发布时间】:2013-12-26 07:01:26
【问题描述】:
我正在使用休眠,播放框架为 1.2.4。
假设我有一个名为 Person 的模型和一个名为 IdentityInfo 的模型,关系是一个人只能有一个身份信息。
我想在 IdentityInfo 获取上使用惰性获取。这是我的模型代码:
public class Person {
// ... some code
@OneToOne(fetch = FetchType.lazy)
@JoinColumn(name = "info_id_fk")
private IdentityInfo info = null;
public IndentityInfo getInfo(){
return this.info;
}
public void setInfo(IdentityInfo info){
this.info = info;
}
}
public class IdentityInfo {
// ... some code
public String xxx = null;
public String getXxx(){
return this.xxx;
}
public void setXxx(String xxx){
this.xxx = xxx;
}
}
但问题出在这里(很奇怪):
我有一个人员列表,我需要查看所有人员对象的身份信息。
并且某些人对象的身份无法正确加载(人有一个对应的身份信息)。
更详细,
当我使用 java reflect 获取此人的身份信息时,有时该信息的属性为空(但不是)。
但是当我简单地使用person.info.getXxx() 时,属性的值就出现了。
并且它没有任何错误消息。程序正常运行。
有人知道吗?
【问题讨论】:
-
请提供准确的错误消息和/或堆栈跟踪
-
没有错误信息。程序正常运行。
-
所以getInfo返回null?您确定数据库包含与该人员的 info_id_fk 对应的 IdentityInfo 吗?如果没有,那么 getInfo 会返回 null 而没有错误是正常的。
-
是的。这个人有一个 identityinfo_id_fk 并且 DB 包含一个相应的 IdentityInfo。
-
尝试像这样增加日志记录:log4j.logger.org.hibernate.SQL=trace log4j.logger.org.hibernate.type=trace log4j.logger.org.hibernate.jdbc=debug 这个应该给出提示,如果没有,请发布失败的延迟提取和成功提取之一的日志
标签: hibernate fetch lazy-evaluation