0

当我尝试在 servlet 中初始化 Hibernate 4 SessionFactory 时:

Configuration config;
ServiceRegistry registry;
SessionFactory factory;
config = new Configuration();
config = config.addAnnotatedClass(Star.class); // <-- Exception here.

我得到一个例外:

SEVERE: Servlet.service() for servlet [hu.adamsan.store.TestHibernate] in context with path [/TestProject] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;
at hu.adamsan.store.TestHibernate.doGet(TestHibernate.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at 

当我在谷歌中查找时,我找不到解决方案,但是当与休眠版本不匹配时,也会出现类似的错误。我制作了一个类似的项目,具有完全相同的 maven 依赖项,使用相同的代码在 doGet 方法中初始化休眠,并且它有效。

maven依赖:

mysql-connector-java 5.1.26
hibernate-core 4.2.6.Final
hibernate-validator 5.0.1.Final
commons-beanutils 1.8.3
commons-collections 3.2.1
log4j 1.2.17
slf4j-api 1.7.5

有谁知道,可能有什么问题?有人可以提供一般性建议,如何处理和调试这些晦涩难懂的错误吗?

4

1 回答 1

2

当您NoSuchMethodError在外部库中获得 a 时,通常是由于在类路径上具有相同依赖项的多个版本。这可能是由于传递依赖,因此仅通过查看pom.xml项目中的依赖来检测它是不够的。如果您执行 a mvn dependency:tree,它也会列出所有传递依赖项,因此请查找同一依赖项的多个版本。

也可能是同一个类实现了多个依赖,所以google一下,找出哪些jar包含它。http://www.jarfinder.com/index.php/java/info/org.hibernate.cfg.Configuration

于 2013-10-06T15:07:59.350 回答