Я загружаю 2,5 миллиона сложных объектов в 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
произошло после использования этого метода.
- Есть идеи, почему так может быть?
- Как отладить такого рода проблемы?