如何取消代理hibernate对象,以支持多态?
考虑以下示例。A和B类是两个hibernate实体。B具有两个子类型C和D。
List<A> resultSet = executeSomeHibernateQuery();
for(A nextA : resultSet) {
for(B nextB : nextA.getBAssociations() {
if(nextB instanceof C) {
// do something for C
} else if (nextB instanceof D) {
// do something for D
}
}
}
该代码无法执行C或D块,因为B集合已被延迟加载,并且B的所有实例均为Hibernate代理。我想要一种取消代理的方法。
注意:我意识到可以优化查询以急切地获取所有B。我正在寻找替代方案。
这是我们的解决方案,已添加到持久性工具中:
public T unproxy(T proxied)
{
T entity = proxied;
if (entity instanceof HibernateProxy) {
Hibernate.initialize(entity);
entity = (T) ((HibernateProxy) entity)
.getHibernateLazyInitializer()
.getImplementation();
}
return entity;
}
问题内容: 在过去的几天中,我尝试使用MOXy JAXB支持对Hibernate模型的XML编组/解组。尝试执行此操作时,我遇到了hibernate代理对象的问题。考虑类似: 我尝试通过以下方式使用MOXy JAXB映射此代码: 我的问题是,hibernate实例化了通过在User上调用getAddress()获得的地址的代理对象。然后,当JAXB尝试封送对象时,它无法发现它实际上是它要封送的Co
问题内容: 我变得好,老又怕,而且在这种情况下经常发生,我在查找导致问题的代码中存在哪些细微的错误时遇到了问题。 我的问题是:有没有办法获取当前Hibernate会话中每个对象的列表? 当我得到这个问题的答案时,我可能会解决当前的问题,但是无论如何,能够列出会话中的所有内容将在下次发生时大有帮助。 问题答案: Hibernate不会向公众公开其内部信息,因此您不会在公共API中找到要搜索的内容。但
问题内容: 在合理的时间内从数据库中完全加载非常复杂的对象以及合理的查询数量时,我遇到了问题。 我的对象有很多嵌入式实体,每个实体都引用了另一个实体,另一个实体又引用了另一个,依此类推(因此,嵌套级别为6) 因此,我创建了示例来演示我想要的内容:https : //github.com/gladorange/hibernate-lazy- loading 我有用户。 用户有喜欢的 橙子,苹果,葡萄
问题内容: 据我了解(如果我错了,请纠正我),Hibernate使用对象引用来检查对象的相等性。当Hibernate识别同一数据库记录中有多个对象附加时,它将引发以下异常。 我的问题是,Hibernate是否使用方法检查对象是否相等(默认的equal方法使用对象引用)?如果为true,则重写的方法会改变Hibernate的行为吗? 注意:我的问题不是关于Hibernate持久对象中的实现或方法问题
问题内容: 我用hibernate映射的对象具有奇怪的行为。为了知道对象为何表现异常,我需要知道是什么使该对象变脏了。有人可以帮我提示吗? 该对象是Java / Spring上下文中的Java类。因此,我希望针对Java平台的答案。 编辑:我想获得对Hibernate脏状态的访问以及它如何在连接到会话的对象上更改。我不知道一段代码会对您有什么帮助。 至于实际的问题:在由Spring Transac
问题内容: 什么是最佳解决方案? 制作视频的人相信 在许多情况下,hibernate过大 基本的sql是一种很好的语言,它可以使hibernate抽象化 我听说过其他一些ORM实现,例如 https://github.com/rufiao/persist http://ormlite.com/ http://www.simpleorm.org/ 我想听听他们如何比较,以及每个人的优缺点。 问题答案