Логирование Hibernate c использованием Log4j2. NullPointerException / Hibernate 4 / Log4j2

Вернёмся к нашим проблемам логирования при использовании новой версии библиотеки Log4j2. Ранее мы разобрались, как заставить использовать библиотеку Log4j2 в Spring 4.

Суть проблемы: на любую ошибку, которая произошла в Hibernate 4, будь то кривой маппинг через аннотации, кривое указание имени столбца при @JoinColumn или ещё что-то наподобие этих ошибок, Spring 4 выбрасывает NullPointerException без описания:

NPE NullPointerException Log4j2 Hibernate4

Хотя на самом деле ошибка выбрасывается в этом месте:

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>

Всё, после добавления новой версии этой библиотеки ошибки станут пробрасываться выше.

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *