我今天在使用映射集合时遇到延迟加载无法正常工作的问题。我发现这篇优秀的文章似乎可以解决问题
http://justonjava.blogspot.co.uk/2010/09/lazy-one-to-one-and-one-to-many.html
我不明白的一件事是使用 FieldHandled 的解决方法是如何工作的。谁能帮我理解这一点?有问题的代码如下(从链接上的示例复制):
@Entity
public class Animal implements FieldHandled {
private Person owner;
private FieldHandler fieldHandler;
@OneToOne(fetch = FetchType.LAZY, optional = true, mappedBy = "animal")
@LazyToOne(LazyToOneOption.NO_PROXY)
public Person getOwner() {
if (fieldHandler != null) {
return (Person) fieldHandler.readObject(this, "owner", owner);
}
return owner;
}
public void setOwner(Person owner) {
if (fieldHandler != null) {
this.owner = fieldHandler.writeObject(this, "owner", this.owner, owner);
return;
}
this.owner = owner;
}
public FieldHandler getFieldHandler() {
return fieldHandler;
}
public void setFieldHandler(FieldHandler fieldHandler) {
this.fieldHandler = fieldHandler;
}
}
我错过了什么?也许我对hibernate的生命周期了解不够?我很乐意调查,但任何人都可以给我一些指示。
提前致谢。
编辑
我推动了很多变化,所以我的很多实体都实现了 FieldHandled,但后来发现我的一些测试失败了。我抽出 SQL 并得到一些奇怪的东西,如果这个接口是用这些方法集实现的,那么 SQL 会以不同的顺序发生。
public FieldHandler getFieldHandler() {
return fieldHandler;
}
public void setFieldHandler(FieldHandler fieldHandler) {
this.fieldHandler = fieldHandler;
}
这导致测试失败,因为当我断言时事情并不完全正确。这增加了我对这个 FieldHandler 变量的误解。