Как я могу заставить java Hibernate генерировать исключения вместо регистрации сообщений logj4?

#java #hibernate #exception #log4j

#java #спящий режим #исключение #log4j

Вопрос:

Досадно, что Hibernate в некоторых случаях, похоже, любит записывать журнал в log4j сам. Я этого не хочу. Я бы хотел, чтобы он создавал исключение, когда что-то идет не так, как в хорошей библиотеке.

Кто-нибудь знает, возможно ли это, и, что более важно, как мне это сделать?

Например, я получаю этот журнал уровня ОШИБОК «Обнаружена взаимоблокировка при попытке получить блокировку; попробуйте перезапустить транзакцию». Было бы не так уж плохо, если бы он хотя бы включал трассировку стека или, возможно, запрос, который привел к этой тупиковой ситуации. Но это не так, поэтому было сложно отладить некоторые из этих случаев.

Я просмотрел файл dtd отображения гибернации, XML-файл конфигурации гибернации и файл dtd конфигурации гибернации, но мне ничего не приходит в голову как способ управления протоколированием.

Я вижу следующие строки в моем файле log4j.properties:

 # Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL
log4j.logger.org.hibernate.jdbc.AbstractBatcher=FATAL
  

Будет ли hibernate генерировать исключение, если я обозначу определенные вещи как «ФАТАЛЬНЫЕ»?

Я немного заблудился в болоте гибернации, поэтому был бы признателен за некоторые указания. В качестве контекста я работаю с hibernate уже 2 года, но я ни в коем случае не эксперт в этом.

Комментарии:

1. Я думаю, что hibernate генерирует исключения, которые, вероятно, проглатываются вашим приложением. Можете ли вы поместить try catch вокруг вызова hibernate, который вызывает проверку этого сообщения журнала.

2. У нас есть try catch практически для всего в нашей системе, включая вызов, который вызывал эти журналы. Я знаю, как работают исключения.

Ответ №1:

Мы обнаружили, что hibernate фактически генерирует исключения, но он также регистрирует. Мы устанавливаем наш log4j таким образом, чтобы hibernate не регистрировал исключения из определенных классов, как я написал в своем вопросе:

 # Don't log Hibernate flushing exceptions (usually StaleStateExceptions)
log4j.logger.org.hibernate.event.def.AbstractFlushingEventListener=FATAL