Java Hibernate将对象的代理设置为
我们正在使用我们开发的一组Web服务 其中一个服务使用JPA映射从一些表中检索信息。Hibernate返回一个对象,并按预期工作 另一个服务检索一个非常相似的对象,它返回一个代理而不是一个读取对象。提取设置为“急切”,因此我真的不明白为什么会发生这种情况。我们尝试了几种方法将代理转换为真实数据(我理解这是不必要的,因为它被设置为“渴望”),但代理没有被转换 我们正在使用hibernate 3.5.4-final,以防出现问题 我真的不知道从哪里开始,有什么提示吗Java Hibernate将对象的代理设置为,java,hibernate,hibernate-mapping,javassist,Java,Hibernate,Hibernate Mapping,Javassist,我们正在使用我们开发的一组Web服务 其中一个服务使用JPA映射从一些表中检索信息。Hibernate返回一个对象,并按预期工作 另一个服务检索一个非常相似的对象,它返回一个代理而不是一个读取对象。提取设置为“急切”,因此我真的不明白为什么会发生这种情况。我们尝试了几种方法将代理转换为真实数据(我理解这是不必要的,因为它被设置为“渴望”),但代理没有被转换 我们正在使用hibernate 3.5.4-final,以防出现问题 我真的不知道从哪里开始,有什么提示吗 @Entity public c
@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;
}
我的一个想法是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"/>
我们修复了调用entityManager.unProxy的问题,但它仍然感觉不正确,因为它应该已经被取消,因为映射设置为“渴望”。我们修复了调用entityManager.unProxy的问题,但它仍然感觉不正确,因为它应该已经被取消,因为映射设置为“渴望”。您可以发布该实体吗类以及如何获取实体。@MadhusudanaReddySunnapu:完成,抱歉。我应该一开始就添加它。Foo2
和Foo3
都标记为渴望。我想您看到的是列表的代理。能否启用show_sql
并检查查询是否被激发以获取渴望的关系?@MadhusudanaReddySunnapu:再次抱歉,这是被代理的Foo2的obj属性。无论如何,你的建议是一个很好的观点。我们将尝试它,因为它也是适用的。谢谢。你能发布那个实体类吗?你是如何得到实体的。@MadhusudanaReddySunnapu:完成了,对不起。我应该一开始就添加它。Foo2
和Foo3
都标记为渴望。我想您看到的是列表的代理。能否启用show_sql
并检查查询是否被激发以获取渴望的关系?@MadhusudanaReddySunnapu:再次抱歉,这是被代理的Foo2的obj属性。无论如何,你的建议是一个很好的观点。我们将尝试它,因为它也是适用的。谢谢。理想情况下应该是。加载渴望的收藏。您是否有机会检查查询是否被激发以获取渴望的关系?@Madhusudanareddysunapu:在这种情况下,查询不会被激发。@Madhusudanareddysunapu:当然,这是一个简化的示例,真正的实体(Foo3)有一个复杂的依赖关系树。我不确定这是否会有影响。理想情况下,它应该。加载渴望的集合。您是否有机会检查查询是否被激发以获取渴望的关系?@Madhusudanareddysunapu:在这种情况下,查询不会被激发。@Madhusudanareddysunapu:当然,这是一个简化的示例,真正的实体(Foo3)有一个复杂的依赖关系树。我不确定这是否会有影响。
<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"/>