web-dev-qa-db-ja.com

Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver

Hibernateを介してMySQLデータベースからデータを取得しようとしていますが、このエラーが発生しています。

Failed to create sessionFactory object.org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver could not be loaded

Java.lang.ClassNotFoundException: Could not load requested class : com.mysql.jdbc.Driver
[...]

DAOFactoryというクラスを使用して、休止状態のセッションを取得します。

public class DAOFactory {

    private static boolean isInstance = false;  
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry; 
    private static Session session;

    private DAOFactory() throws ExceptionInInitializerError{        
        if( !isInstance ) {
            try {               
                Configuration cfg   = new Configuration().configure();              
                serviceRegistry     = new ServiceRegistryBuilder().applySettings(cfg.getProperties())
                                                .buildServiceRegistry();
                sessionFactory      = cfg.buildSessionFactory(serviceRegistry);
            } catch (Throwable ex) {
                System.err.println("Failed to create sessionFactory object."+ ex);
                throw new ExceptionInInitializerError(ex);
            }
            session = sessionFactory.openSession();         
            isInstance = true ;
        }               
    }

    public static DAOFactory getInstance() {        
        return new DAOFactory() ;
    }

    public Session getSession() {
        return session ;
    }
}

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="">
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/Enigma</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    </session-factory>
</hibernate-configuration>

そしてmysql-connector-Java-5.1.26-bin.jarはすでにクラスパスにあります:

classpath

誰かが私が見逃しているものを見ていますか?

18
Arthur

回答してくれたReimeusに感謝します。 mysql-connector-Java-5.1.26-bin.jarruntimeクラスパスにある必要があります。

実行->構成の実行...->クラスパス->外部JARの追加。

すべてをきれいにして、もう一度試してください。例外はなくなりました。

28
Arthur

Mavenを使用する場合:pom.xmlに次の依存関係を追加します。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>8.0.17</version>
</dependency>

または here から別のバージョンを選択します。

次に、以下を使用してアーティファクトを取得できます。

mvn dependency:resolve

(IDEを使用しない場合)。

19

場合によっては、Run-> Run Configurations ...-> Classpath-> Add external JARを介してjarclasspathを追加することは適切なソリューションではありません。 。

最初のケース

jarファイルをclasspathフォルダーに入れることができない場合、別の場所からクラスをロードする別の方法があります。 RLClassLoader をインスタンス化するだけで、その上でloadClass()を呼び出すことができます( here と述べました):

URLClassLoader urlCL = new URLClassLoader(new URL[] {"path_to_jar"});
Class driverClass = urlCL.loadClass("com.mysql.jdbc.Driver");

2番目のケース

実行時にclasspathにクラスを追加したい場合( Ranjit Aneeshhere の回答を希望します)、この目的のために、非常にシンプルなオーバーライドされたaddUrlメソッドのみで RLClassLoader を拡張するカスタムクラスローダー:

public class DynamicURLClassLoader extends URLClassLoader {

    public DynamicURLClassLoader(URLClassLoader classLoader) {
        super(classLoader.getURLs());
    }

    @Override
    public void addURL(URL url) {
        super.addURL(url);
    }
}

それからそれを呼び出します:

URLClassLoader urlCL = (URLClassLoader) ClassLoader.getSystemClassLoader();
new DynamicURLClassLoader(urlCL).addURL("path_to_jar");
1
Dzmitry Alifer