2013-10-14 43 views
0

我使用休眠與MySQL,但在運行時我得到以下異常:休眠:無法加載所請求的類

Exception in thread "main" org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver org.h2.Driver class not found 
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:107) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89) 
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788) 
    at driver.Main.main(Main.java:29) 
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.h2.Driver] 
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:141) 
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:104) 
    ... 14 more 
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.h2.Driver 
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138) 
    ... 15 more 

的hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect"> 
     org.hibernate.dialect.MySQLDialect 
    </property> 
    <property name="hibernate.connection.driver_class"> 
     com.mysql.jdbc.Driver 
    </property> 

    <property name="hibernate.connection.url"> 
     jdbc:mysql://localhost/ict 
    </property> 
    <property name="hibernate.connection.username"> 
     root 
    </property> 
    <property name="hibernate.connection.password"> 
     root 
    </property> 

</session-factory> 
</hibernate-configuration> 

我使用註解的類象

@Entity 
@Table (name="method_msisdn_info") 
public class MSISDN { 

    public MSISDN(){} 

    @Id @GeneratedValue @Column(name="msisdn_id") 
    int msisdn_id; 
    public int getMsisdn_id() { 
     return msisdn_id; 
    } 
    public void setMsisdn_id(int msisdn_id) { 
     this.msisdn_id = msisdn_id; 
    } 

    @Column(name="destination_msisdn") 
    BigInteger destination_msisdn; 
    public BigInteger getDestination_msisdn() { 
     return destination_msisdn; 
    } 
    public void setDestination_msisdn(BigInteger destination_msisdn) { 
     this.destination_msisdn = destination_msisdn; 
    } 

    @Column(name="product_list") 
    String product_list; 
    public String getProduct_list() { 
     return product_list; 
    } 
    public void setProduct_list(String product_list) { 
     this.product_list = product_list; 
    } 

    @Column(name="country") 
    String country; 
    public String getCountry() { 
     return country; 
    } 
    public void setCountry(String country) { 
     this.country = country; 
    } 

    @Column(name="operator") 
    String operator; 
    public String getOperator() { 
     return operator; 
    } 
    public void setOperator(String operator) { 
     this.operator = operator; 
    } 

    @Column(name="destination_currency") 
    String destination_currency; 
    public String getDestination_currency() { 
     return destination_currency; 
    } 
    public void setDestination_currency(String destination_currency) { 
     this.destination_currency = destination_currency; 
    } 

    @Column(name="error_code") 
    int error_code; 
    public int getError_code() { 
     return error_code; 
    } 
    public void setError_code(int error_code) { 
     this.error_code = error_code; 
    } 

    @Column(name="wholesale_price_list") 
    String wholesale_price_list; 
    public String getWholesale_price_list() { 
     return wholesale_price_list; 
    } 
    public void setWholesale_price_list(String wholesale_price_list) { 
     this.wholesale_price_list = wholesale_price_list; 
    } 

    @Column (name ="retails_price_list") 
    String retail_price_list; 
    public String getRetail_price_list() { 
     return retail_price_list; 
    } 
    public void setRetail_price_list(String retail_price_list) { 
     this.retail_price_list = retail_price_list; 
    } 

    @Column(name="marked_processed") 
    int marked_processed; 
    public int getMarked_processed() { 
     return marked_processed; 
    } 
    public void setMarked_processed(int marked_processed) { 
     this.marked_processed = marked_processed; 
    } 
} 

終於我喜歡

創建會話
SessionFactory factory = new AnnotationConfiguration().addPackage("models").addAnnotatedClass(MSISDN.class).buildSessionFactory(); 
     Session session = factory.openSession(); 
+0

告訴你更多關於如何配置你的持久性。看起來應用程序試圖加載H2數據庫驅動程序,而您似乎在您的休眠cfg中配置了mySql驅動程序。它看起來並不像你的程序使用你在這裏發佈的hibernate.cfg.xml。可能是你的班級路徑上有該文件的另一個版本。 – Matthias

+0

我將我的hibernate.cfg.xml放在src文件夾中。 –

+0

當您運行應用程序時,該文件是否也在您的類路徑中?例如。如果你使用的是maven,你最好把它放在資源文件夾中。 – Matthias

回答

2

我認爲(但我不確定)創建像您一樣的Configuration對象需要指定配置xml文件。 嘗試這樣的(我它的工作):

Configuration configuration = new AnnotationConfiguration().addPackage("models").addAnnotatedClass(MSISDN.class); 
configuration.configure("hibernate.cfg.xml"); 
SessionFactory factory = configuration.buildSessionFactory(); 
Session session = factory.openSession(); 

無論如何,我注意到,您使用的是大量的過時的方法。我會建議你使用不被棄用的方法。

希望這是有用的

+0

我解決了它。雖然我沒有按照你的方式指定cfg.xml文件,但單獨指定了屬性。問題的原因是,hibernate從我添加到我的類路徑中的hibernate jar中的全局hibernate.properties文件中選取數據庫,方言和其他屬性。 –