尝试通过Hibernate连接到Oracle时获取java.lang.NoSuchMethodError

时间:2016-05-09 14:13:07

标签: java spring oracle hibernate

我正在使用Spring MVC和Hibernate构建一个应用程序。我还没有将Hibernate与Spring集成(两者都是新的),并希望确保可以通过Hibernate首先打开会话。

我创建了一个简单的测试功能,目前收到以下错误

  

线程中的异常" main" java.lang.NoSuchMethodError:   org.hibernate.integrator.internal.IntegratorServiceImpl(Ljava / UTIL / LinkedHashSet; Lorg /休眠/引导/注册表/类装入/ SPI / ClassLoaderService):V

我的日志告诉我,当我尝试使用StandardServiceRegistryBuilder().applySettings()函数调用时会发生错误。

我已经将我的示例函数放在下面,试图创建一个连接(请注意它是无效的,除了尝试捕获任何异常之外,实际上并没有做任何事情)

public static void main (String [] args) {
        testHibernate();
    }
public static void testHibernate() {
        try {
            String hibernateFilePath = "src/main/java/hibernate.cfg.xml";
            File hibernateFile = new File(hibernateFilePath);
            Configuration configuration = new Configuration().configure(hibernateFile);
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
            SessionFactory factory = configuration.buildSessionFactory(builder.build());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这是我的hibernate.cfg.xml文件:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:oracle://servername.website.com:12345/dbname678</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.username">username</property>
        <property name="connection.password">password</property>
    </session-factory>
</hibernate-configuration>

我项目的文件结构:

File Structure

关于我的方法的想法:我知道抛出的错误与调用函数的方式有关。通常,当库Bar的函数Foo调用版本2.0而不是3.0时,会发生java.lang.NoSuchMethodError。我仔细检查了我的依赖项并尝试重建项目,但我仍然面临同样的问题。我还尝试使用IntelliJ的Hibernate样板代码来测试连接,但仍然收到完全相同的错误。

1 个答案:

答案 0 :(得分:1)

你可能有依赖冲突,例如你有一些库的X版,而Hibernate需要同一个库的版本Y.

您可以使用以下命令将Maven用于find dependency conflicts

mvn dependency:tree -Dverbose

它将打印一个依赖树,并指出哪些库彼此冲突。