Двойная регистрация в Hibernate - PullRequest
3 голосов
/ 11 января 2009

Я очень успешно использую Hibernate, но сегодня я заметил странное явление, связанное с ведением журнала. Если я включаю ведение журнала (на уровне «отладки») для классов под org.hibernate (например, org.hibernate.SQL или org.hibernate.impl.SessionImpl), я получу дважды каждую строку журнала, соответствующую этим классам. Я никогда не вижу это при регистрации любого другого пакета.

Вот выдержка из журнала. Первая и четвертая строки мои, остальные - Hibernate:

23:54:45,472 TRACE UserDaoImpl:37 - Loading User by id: 2
23:54:45,473 DEBUG SQL:401 - select user0_.id as id22_2_, user0_.avatar as avatar22_2_, ...
23:54:45,473 DEBUG SQL:401 - select user0_.id as id22_2_, user0_.avatar as avatar22_2_, ...
23:54:45,499 TRACE PropertyDaoImpl:40 - Loading class com.myapp.locale.Region with ID 21
23:54:45,503 DEBUG SQL:401 - select region0_.id as id19_1_, region0_.code as code19_1_, ...
23:54:45,503 DEBUG SQL:401 - select region0_.id as id19_1_, region0_.code as code19_1_, ...

Данные со стороны базы данных показывают, что команды отправляются только один раз (к счастью!).

Я использую Hibernate-Annotations 3.3.1.GA
с соединителем JDBC PostgreSQL 5.0.7
и log4j 1.2.14

1 Ответ

8 голосов
/ 11 января 2009

Все, что я могу придумать:

  1. Убедитесь, что в вашей конфигурации log4j нет нескольких приложений, определенных на разных уровнях? Если ваш appender подключен к регистратору org.hibernate и снова подключен к регистратору org.hibernate.SQL, вы увидите это дважды (если только вы не отключите аддитивность для регистратора более низкого уровня).
  2. У вас нет свойства hibernate.show_sql в вашей SessionFactory? Это не включает ведение журнала в log4j (вы делаете это через конфигурацию log4j), оно просто выводит на консоль. Если ваш log4j также выводит данные на консоль, вы увидите это дважды. Однако это похоже на строку журнала в формате log4j, а не на дампы консоли, сделанные hibernate, так что это кажется маловероятным. Хотя стоит упомянуть.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...