どうやら slf4j を使用している Hibernate 3.2 から 3.4 にアップグレードしようとしています。私たちのプロジェクトは現在 log4j を使用しています。したがって、slf4j-log4j12 でラップされた実装を使用する必要があると想定しています。
Maven slf4j の依存関係は次のとおりです。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
log4j の依存関係は次のとおりです。
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
slf4j-log4j12 と log4j の両方が最新バージョンを参照しています (Maven リポジトリで見つけることができます)。アプリを実行すると、Hibernate がログに失敗します。
java.lang.NoSuchFieldError: name
at org.slf4j.impl.Log4jLoggerAdapter.<init>(Log4jLoggerAdapter.java:75)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163)
...
私は何が欠けていますか?
編集 1: pom.xml から log4j 依存関係を削除すると、エラーが発生します。
java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60)
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163)
...
編集 2: このブログでは、この問題は、間違ったバージョンの slf4j-api.jar で出荷されている hibernate アノテーションが原因であると主張しています。