我们正在开发一组我们开发的Web服务。
其中一个服务使用JPA映射从一些表中检索信息。 Hibernate返回一个对象,它按预期工作。
其他服务检索一个非常相似的对象,它返回一个代理而不是一个读对象。获取设置为EAGER所以我真的不明白为什么会发生这种情况。我们尝试了几种方法将代理转换为实际数据(我知道这是不必要的,因为它设置为EAGER)但代理不会被转换。
我们正在使用hibernate 3.5.4-final以防万一。
我真的不知道从哪里开始,有什么提示?
@Entity
public class Foo1
{
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
private List<Foo2> list = new ArrayList<Foo2>();
}
@Entity
public class Foo2
{
@ManyToOne(fetch = FetchType.EAGER)
private Foo3 obj;
}
要检索我们调用的数据:
entityManager.find(Foo1.class, id);
我有一个想法是,Hibernate可能正在管理内部异常,这就是为什么我得到代理而不是真实对象的原因?
修改 这是与问题相关的Hibernate配置:
<property name="hibernate.max_fetch_depth" value="0"/>
<property name="hibernate.default_batch_fetch_size" value="16"/>
<property name="hibernate.jdbc.batch_size" value="16"/>
答案 0 :(得分:0)
我们修复了调用entityManager.unProxy
的问题,但它仍然感觉不对,因为它应该已经没有代理,因为映射设置为EAGER。