2011-08-08 26 views
7

Esta es una pregunta sobre el hibernate de Java.hibernate.cfg.xml contiene información sobre la base de datos MySQL ¿por qué recibo esta excepción?

mi hibernate.cfg.xml es

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/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:3306/poc</property> 
    <property name="hibernate.connection.username">user</property> 
    <property name="hibernate.connection.password"/> 
    <mapping class="test.person" file="" jar="" package="" resource="person.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

de conexión a la base de datos está funcionando y que puede explorar las bases de datos y tablas,

mi muestra

person.hbm.xml es

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-mapping> 
    <class name="test.person" table="person"> 
     <id name="id" type="int" column="id" > 
      <generator class="assigned"/> 
     </id> 
     <property name="fName"> 
      <column name="fName" /> 
     </property> 
     <property name="lName"> 
      <column name="lName"/> 
     </property> 
     <property name="age"> 
      <column name="age"/> 
     </property> 
     <property name="gender"> 
      <column name="gender"/> 
     </property> 
    </class> 
</hibernate-mapping> 

esta es mi clase de persona

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package test; 

public class person { 

    private int id; 
    private String fName; 
    private String lName; 
    private String gender; 
    private int age; 

    public person() { 
     System.out.println("person"); 
    } 

    public int getId() { 
     return id; 
    } 

    public int getAge() { 
     return age; 
    } 

    public String getfName() { 
     return fName; 
    } 

    public String getGender() { 
     return gender; 
    } 

    public String getlName() { 
     return lName; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public void setfName(String fName) { 
     this.fName = fName; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public void setlName(String lName) { 
     this.lName = lName; 
    } 

} 

Aquí viene mi clase principal

package test; 


import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class Test { 

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 


     Session session = null; 
     SessionFactory sessionFactory =new Configuration().configure().buildSessionFactory(); 
     session = sessionFactory.openSession(); 

     person obj = new person(); 
     obj.setfName("Aqif"); 
     obj.setlName("Hamid"); 
     obj.setAge(24); 
     obj.setGender("Male"); 

     session.save(obj); 
     session.flush(); 
     session.close(); 

    } 
} 

estoy recibiendo esta excepción,

SEVERE: JDBC Driver class not found: org.apache.derby.jdbc.ClientDriver 
java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100) 
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:61) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) 
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) 
    at test.Test.main(Test.java:15) 
Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: org.apache.derby.jdbc.ClientDriver 
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:66) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) 
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) 
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) 
    at test.Test.main(Test.java:15) 
Caused by: java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100) 
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:61) 
    ... 7 more 
Java Result: 1 

Por favor, ayudarme a resolver estas excepciones

Yo nose sé por qué estoy haciendo esto excepción

java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver 

Donde como mi hibernate.cfg.xml se establece para la base de datos MySQL


EDIT:

Ubicación de los archivos,

Se encuentra en la raíz de los archivos .java

C: ..... NetBeansProjects \ test \ src

Esa es la carpeta src de mi proyecto.

y java archivos están en

C: ..... NetBeansProjects \ test src \ test \

He tratado de hacer frente a mi archivo hibernate.cfg.xml algunos otros lugares también.

+0

¿Dónde se encuentra su 'hibernate.cfx.xml'? – Jeremy

+0

Se encuentra en la raíz de los archivos .java NetBeansProjects \ test \ src Esa es la carpeta src de mi proyecto. He intentado hacer frente a mi archivo hibernate.cfg.xml en algunas otras ubicaciones también. –

+0

-1 para la persona que no se nombra Persona. Es bastante estándar en Java tener los nombres de clase en mayúscula. –

Respuesta

9

El hibernate.cfg.xml debe estar presente en la raíz del classpath. Hibernate usa el cargador de clases de contexto del subproceso actual para ubicar y cargar este archivo. Esto significaría que:

  • Si la clase Test está dentro de un frasco, entonces el archivo de configuración, debe estar en la base de la jarra.
  • Si la clase Test está en un directorio, digamos /classes/test/Test.class, entonces hibernate.cfg.xml debe estar presente en /classes.

Su problema actual probablemente se deba a que otro archivo hibernate.cfg.xml fue localizado y cargado por Hibernate. Esto es posible si no se encontró ningún archivo de configuración en la raíz de su ruta de clase; Hibernate luego delega la carga del archivo de configuración en el cargador de clases de la clase Environment, hasta que localice un archivo de configuración. Para evitar esto, debe asegurarse de que su archivo de configuración deseado, con las propiedades relacionadas con MySQL, debe estar presente en la raíz de su classpath.

+1

O ponga su configuración en 'mysql-hibernate.cfg.xml' y llame a' configure ("mysql-hibernate.cfg.xml") ' – Vlad

+0

Mire la edición de mi publicación –

+0

@Aqif, esos son los directorios de su fuente archivos. Deberá asegurarse de que el archivo de configuración se copie en el directorio de ruta de clases de tiempo de ejecución o JAR. Su IDE puede o no hacer eso por usted. –

2

Está utilizando el hibernate.cfg.xml incorrecto. Debe estar ubicado en su src, no en un paquete/subdirectorio.

1

En primer lugar, cambie el nombre de su clase en el formato correcto de java. Reemplace el nombre de clase "persona" por "Persona". Y ahora cambiar la base de datos por defecto de eclipses a la de la base de datos necesarios a la que desea conectarse por seguir Hibernate Tutorial 02 - Setting Up Hibernate y Hibernate Tutorial 03 Part 1- Writing a Hibernate Application

Tras la finalización de mecanismo de conexión, verifique la conexión de base de datos con la ayuda de la opción de alfiler en y eclipses ... Ahora ya está listo para conectarse con usted dB con Hibernate ...

0

hibernate.cfg.xml Poner en la raíz de los archivos jar de ruta de clases y set en la ruta de clase Entonces wil funciona.

0

A menos que hayas dado la configuración a fábrica de sesión, no creará objeto de sesión con mapeo e información de base de datos. Por lo que sólo crear la configuración mediante el paso hibernate.cfg.xml

Configuration cfg = new Configuration(); 
cfg.configure("hibernate.cfg.xml");// populates the data   
            // configuration file 

// creating seession factory object 
SessionFactory factory = cfg.buildSessionFactory(); 

// creating session object 
Session session = factory.openSession(); 
Cuestiones relacionadas