【发布时间】:2018-09-20 08:05:09
【问题描述】:
我正在将 250 万个复杂对象加载到 MS SQL。
由于性能原因,我在内存中使用了某种缓存。
在这个过程中我打电话给Hibernate.initialize(...)
使用默认 JVM 设置的应用程序总是在同一个地方失败(每次相同的记录失败)。
我有三个Set<>,我打了三个电话Hibernate.initialize(...)
(A部分)
总是第二个 Set<> 未正确初始化。
- 当我在初始化之前设置断点并执行代码时 一切都很好(没有发生问题/没有发生异常)
- 当我在
LazyInitializationException之后设置断点发生时 那么问题总会发生。 - 当我测试
id的记录并在初始化后调用toString()那么一切都很好(没有问题发生/没有异常发生) - B节
代码如下:
private SomeObject getObject(int id) {
SomeObject result = null;
if(!cache.containsKey(id)) {
SomeObject obj = context.getEntity(SomeObject.class, new ContextKey(id));
// section A
Hibernate.initialize(((SomeParentObject)obj.getField()).getSetA());
Hibernate.initialize(((SomeParentObject)obj.getField()).getSetB());
Hibernate.initialize(((SomeParentObject)obj.getField()).getSetC());
// section B
if(id == 1234) {
((SomeParentObject)obj.getField()).getSetB().toString();
}
cache.put(id, obj);
result = obj;
} else {
result = cache.get(id);
}
return result;
}
LazyInitializationException在使用此方法后发生。
- 知道为什么会这样吗?
- 如何调试这种 有问题吗?
【问题讨论】:
标签: java hibernate debugging lazy-initialization