У меня есть экземпляр org.hibernate.envers.entities.mapper.relation.lazy.proxy.ListProxy
, который вызывает некоторое горе: всякий раз, когда я программно пытаюсь получить к нему доступ, я получаю исключение нулевого указателя (т. Е. Вызов list.size()
), но когда я впервые проверяю объект с помощью инспектора переменных Eclipse, я вижу Hibernate генерирует оператор SQL, и список изменяется динамически. Тогда все работает. Как я могу сделать то же самое программно? Я пробовал list.toString()
, но это не помогает.
Обновление 1
Не знаю, помогает ли это, но когда я впервые нажимаю на экземпляр списка, я вижу на дисплее:
com.sun.jdi.InvocationException occurred invoking method.
Затем выполняется запрос к базе данных, и когда я нажимаю снова, я получаю правильный .toString()
результат.
Обновление 2
Вот исходное исключение, которое я получаю (когда я не проверяю элемент в режиме отладки).
java.lang.NullPointerException
at org.hibernate.envers.query.impl.EntitiesAtRevisionQuery.list(EntitiesAtRevisionQuery.java:72)
at org.hibernate.envers.query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:104)
at org.hibernate.envers.entities.mapper.relation.OneToOneNotOwningMapper.mapToEntityFromMap(OneToOneNotOwningMapper.java:74)
at org.hibernate.envers.entities.mapper.MultiPropertyMapper.mapToEntityFromMap(MultiPropertyMapper.java:118)
at org.hibernate.envers.entities.EntityInstantiator.createInstanceFromVersionsEntity(EntityInstantiator.java:93)
at org.hibernate.envers.entities.mapper.relation.component.MiddleRelatedComponentMapper.mapToObjectFromFullMap(MiddleRelatedComponentMapper.java:44)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:67)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:39)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.AbstractCollectionInitializor.initialize(AbstractCollectionInitializor.java:67)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.checkInit(CollectionProxy.java:50)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.size(CollectionProxy.java:55)
at <MY CODE HERE, which checks list.size()>
Окончательное решение (На самом деле это скорее временный взлом)
boolean worked = false;
while (!worked) {
try {
if(list.size() == 1) {
// do stuff
}
worked = true;
} catch (Exception e) {
// TODO: exception must be accessed or the loop will be infinite
e.getStackTrace();
}
}