我在Hibernate 5中映射了这个实体
class A {
private String code;
private B child;
@LazyToOne(LazyToOneOption.PROXY)
@ManyToOne(fetch=FetchType.LAZY)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumns({...})
public B getChild() { ... }
}
我的加载仅A 的查询是:
from A where a.code like :q
通过这种配置,Hibernate在A和B实体上进行选择。 我不希望它加载B但只加载A
我错过了什么?
答案 0 :(得分:1)
我遇到了同样的问题,这是由于如果定义了NotFoundAction.IGNORE,则Hibernate会忽略FetchType.LAZY。
经过一番谷歌搜索后,我找到了一种解决方法: http://chekkal.blogspot.com/2012/09/hibernate-lazy-loading-and-notfound.html
public FieldType getField() {
if(!Hibernate.isInitialized(field)) {
try {
Hibernate.initialize(field);
}catch(EntityNotFoundException one) {
field=null;
}
}
return field;
}
在Hibernate 5.4.2中,异常已更改为EntityNotFoundException,但此变通方法似乎对我有用。