Hibernate返回设置为EAGER

时间:2016-03-29 08:33:25

标签: java hibernate hibernate-mapping javassist

我们正在开发一组我们开发的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"/>

1 个答案:

答案 0 :(得分:0)

我们修复了调用entityManager.unProxy的问题,但它仍然感觉不对,因为它应该已经没有代理,因为映射设置为EAGER。