Hibernate: impossible de charger la classe demandée

Je suis de l'utilisation d'Hibernate avec mysql mais à l'exécution j'obtiens l'exception suivante:

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>

Je suis en utilisant des classes annotées comme

@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;
}
}

enfin j'ai créer une session comme

SessionFactory factory = new AnnotationConfiguration().addPackage("models").addAnnotatedClass(MSISDN.class).buildSessionFactory();
Session session = factory.openSession();
  • En dire un peu plus sur la façon dont vous configurez votre persévérance. Il ressemble à l'application tente de charger un H2 pilote de base de données, alors que vous semblez configurer un pilote mySql dans votre hibernate cfg. Il ne ressemble pas à votre programme à l'aide de la hibernate.cfg.xml vous avez posté ici. Peut-être que vous avez une autre version du fichier sur votre chemin de classe.
  • J'ai placé mon hibernate.cfg.xml à l'intérieur du dossier src.
  • Est ce fichier dans votre classpath lorsque vous exécutez votre application? E. g. si vous utilisez maven, il est préférable de le mettre dans le dossier de ressources.
  • Non, je ne suis pas à l'aide de maven. et oui, quand je le lance, l' (exactement la même)hibernate.cfg.xml est créé dans le répertoire bin c'est à dire qu'il est dans le paquet binaire.
  • Mais vous avez raison, parce que peu importe où je place mon hibernate.cfg.xml la même erreur se produit (ce qui signifie qu'il ne se plaint pas qu'il ne trouve pas le cfg.xml). Mais je n'obtiens pas la façon de corriger l'erreur.
  • Jetez un oeil ici: docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/... Semble que le hibernate.dialect propriété ne doit pas être à l'intérieur de la session-factory tag.