【发布时间】:2012-06-29 00:58:02
【问题描述】:
如何取消代理休眠对象以支持多态性?
考虑以下示例。 A 类和 B 类是两个休眠实体。 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。我正在寻找替代方案。
【问题讨论】:
-
我知道这是一个老问题,但由于它作为谷歌搜索的第一个结果出现,我必须在这里评论,如果你必须使用
instanceof,那么你可能正在做多态性错误。