Логирование Hibernate c использованием Log4j2. NullPointerException / Hibernate 4 / Log4j2
Вернёмся к нашим проблемам логирования при использовании новой версии библиотеки Log4j2. Ранее мы разобрались, как заставить использовать библиотеку Log4j2 в Spring 4.
Суть проблемы: на любую ошибку, которая произошла в Hibernate 4, будь то кривой маппинг через аннотации, кривое указание имени столбца при @JoinColumn или ещё что-то наподобие этих ошибок, Spring 4 выбрасывает NullPointerException без описания:
Хотя на самом деле ошибка выбрасывается в этом месте:
hibernate-core-4.3.10.Final-sources.jar!/org/hibernate/cfg/annotations/CollectionBinder.java:1460
catch (AnnotationException ex) { throw new AnnotationException( "Unable to map collection " + collectionEntity.getClassName() + "." + property.getName(), ex ); } |
Чтобы вызвать эту ошибку я просто указал неправильный referencedColumnName для аннотации @JoinColumn:
@JoinColumn(referencedColumnName = "some_corrupted_name") |
Согласитесь, что AnnotationException(“Unable to map collection” …) слегка отличается от NullPointerException без описания :)
Недолгое разбирательство привело меня к багу в самом Hibernate 4, который использует JBoss Logging. Как оказалось, использование Log4j2 добавили только в версию 3.2.0.Final.
Для решения проблемы NullPointerException на любую ошибку в Hibernate 4 нужно просто указать последнюю версию библиотеки org.jboss.logging:jboss-logging:
<dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.2.0.Final</version> </dependency> |
Всё, после добавления новой версии этой библиотеки ошибки станут пробрасываться выше.
Последние комменатрии