2017-05-20 2 views
0

RESOUDREinitiale création SessionFactory échoué: org.hibernate.MappingException: configuration incorrecte

Cette question est sur mise en veille prolongée java.

Quand je lance la classe principale i obtenir cette erreur

Initial SessionFactory creation failed: org.hibernate.MappingException: 
invalid configuration 
Exception in thread "main" java.lang.NullPointerException 
at principal.ClienteDAO.guardaCliente(ClienteDAO.java:38) 
at principal.Main.main(Main.java:31) 
C:\Users\Nico\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 2 seconds) 

ne sais pas pourquoi im obtenir cette exception

mon hibernate.cfg.xml est

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
    <!--TODA LA INFORMACION FUE SACADA DE: http://www.javatutoriales.com/2009/05/hibernate-parte-1-persistiendo-objetos.html--> 

    <!-- parametros para la conexion a la base de datos --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/basededatosprueba</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password"></property> 

    <!-- Configuracion del pool interno --> 
    <property name="connection.pool_size">1</property> 

    <!-- Dialecto de la base de datos --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Otras propiedades importantes --> 
    <property name="show_sql">true</property> 
    <property name="hbm2ddl.auto">create-drop</property> 

    <!-- Archivos de mapeo --> 
    <mapping resource="mapeos/Cliente.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

ma classe HibernateUtil est

public class HibernateUtil { 

private static SessionFactory sessionFactory = buildSessionFactory(); 

private static SessionFactory buildSessionFactory() 
{ 
    try 
    { 
    if (sessionFactory == null) 
    { 
     Configuration configuration = new Configuration().configure(HibernateUtil.class.getResource("/hibernate.cfg.xml")); 
     StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder(); 
     serviceRegistryBuilder.applySettings(configuration.getProperties()); 
     ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 
     sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
    } 
    return sessionFactory; 
    } catch (Throwable ex) 
    { 
    System.err.println("Initial SessionFactory creation failed: " + ex); 
    throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() 
{ 
    return sessionFactory; 
} 


public static void shutdown() 
{ 
    getSessionFactory().close(); 
} 

mon ClassDAO est

public class ClienteDAO { 
private Session sesion; 
private Transaction tx; 

public int guardaCliente(Cliente cliente) throws HibernateException 
{ 
    int id = 0; 

    try 
    { 
     iniciaOperacion(); 
     id = (int) sesion.save(cliente); 
     tx.commit(); 
    } catch (HibernateException he) 
    { 
     manejaExcepcion(he); 
     throw he; 
    } finally 
    { 
     sesion.close(); 
    } 

    return id; 
} 

public void actualizaCliente(Cliente cliente) throws HibernateException 
{ 
    try 
    { 
     iniciaOperacion(); 
     sesion.update(cliente); 
     tx.commit(); 
    } catch (HibernateException he) 
    { 
     manejaExcepcion(he); 
     throw he; 
    } finally 
    { 
     sesion.close(); 
    } 
} 

public void eliminaCliente (Cliente cliente) throws HibernateException 
{ 
    try 
    { 
     iniciaOperacion(); 
     sesion.delete(cliente); 
     tx.commit(); 
    } catch (HibernateException he) 
    { 
     manejaExcepcion(he); 
     throw he; 
    } finally 
    { 
     sesion.close(); 
    } 
} 

public Cliente obtenContacto(int codCliente) throws HibernateException 
{ 
    Cliente cliente = null; 
    try 
    { 
     iniciaOperacion(); 
     cliente = (Cliente) sesion.get(Cliente.class, codCliente); 
    } finally 
    { 
     sesion.close(); 
    } 

    return cliente; 
} 

public List<Cliente> obtenListaContactos() throws HibernateException 
{ 
    List<Cliente> listaContactos = null; 

    try 
    { 
     iniciaOperacion(); 
     listaContactos = sesion.createQuery("from Contacto").list(); 
    } finally 
    { 
     sesion.close(); 
    } 

    return listaContactos; 
} 

private void iniciaOperacion() throws HibernateException 
{ 
    sesion = HibernateUtil.getSessionFactory().openSession(); 
    tx = sesion.beginTransaction(); 
} 

private void manejaExcepcion(HibernateException he) throws HibernateException 
{ 
    tx.rollback(); 
    throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he); 
} 
} 

et im essayant de courir

public static void main(String[] args) { 

    int idAEliminar = 0; 
    ClienteDAO clienteDAO = new ClienteDAO(); 
    Cliente contactoRecuperado; 

    //Creamos tes instancias de Contacto (String nombre, String direccion, int codigoPostal, String telefono, String cuit) 
    Cliente cliente1 = new Cliente("Pedro", "dark 340", 3080, "86484","15531"); 
    Cliente cliente2 = new Cliente("Manuel", "orark 780", 5160, "86484","15531"); 
    Cliente cliente3 = new Cliente("Martin", "docrk 495", 3060, "86484","15531"); 

    //Guardamos las tres instancias, guardamos el id del contacto1 para usarlo posteriormente 
    idAEliminar = clienteDAO.guardaCliente(cliente1); 
    clienteDAO.guardaCliente(cliente2); 
    clienteDAO.guardaCliente(cliente3); 

    //Modificamos el contacto 2 y lo actualizamos 
    cliente2.setNombre("Nuevo Contacto 2"); 
    clienteDAO.actualizaCliente(cliente2); 

    //Recuperamos el contacto1 de la base de datos 
    contactoRecuperado = clienteDAO.obtenContacto(idAEliminar); 
    System.out.println("Recuperamos a " + contactoRecuperado.getNombre()); 

    //Eliminamos al contactoRecuperado (que es el contacto3) 
    clienteDAO.eliminaCliente(contactoRecuperado); 

    //Obtenemos la lista de contactos que quedan en la base de datos y la mostramos 
    List<Cliente> listaContactos = clienteDAO.obtenListaContactos(); 
    System.out.println("Hay " + listaContactos.size() + " clientes en la base de datos"); 

    for(Cliente c : listaContactos) 
    {System.out.println("-> " + c.getNombre()); 
    } 
} 

EDIT:

mon Class.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
<class name="principal.Cliente" table="CLIENTE"> 
    <id name="codigo" column="codigo"> 
     <generator class="identity" /> 
    </id> 
    <property name="nombre" type="string" column="nombre"/> 
    <property name="direccion" type="string" column="direccion"/> 
    <property name="telefono" type="string" column="telefono"/> 
    <property name="cuit" type="string" column="cuit"/> 
    <property name="codigoPostal" type="int" column="cp"/> 
    <property name="saldo" type="double" column="saldo"/> 
    <property name="deuda" type="double" column="deuda"/> 
</class> 
</hibernate-mapping> 

EDIT 2: Alors, je ne sais pas pourquoi, mais je changer le hibernate.cfg.xml et maintenant il fonctionne, ici il est

<?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> 
    <!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/basededatosprueba</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password"></property> 
    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 
    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 
    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 
    <!-- Drop and re-create the database schema on startup --> 
    <property name="hbm2ddl.auto">create</property> 

    <mapping resource="mapeos/Cliente.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

résolu? nous verrons

+0

supposons que l'exception est 'org.hibernate.MappingException' et il peut être utile si vous pouvez partager le' Cliente.hbm.xml' et le pojo –

+0

ok, je l'ai édité, donc il y a :) – NicolasB

Répondre

0

Je pense que vous devrez peut-être fermer votre balise de configuration hibernate dans votre fichier XML.

+0

oui, je n'a pas remarqué qu'il n'était pas montré dans le code, merci – NicolasB

+0

Aucun problème, pourriez-vous s'il vous plaît accepter ma réponse? – Sam