प्रारंभिक SessionFactory बनाने में विफल: org.hibernate.MappingException: अवैध विन्यास

वोट
0

हल किया

यह सवाल जावा हाइबरनेट बारे में है।

जब मैं मुख्य वर्ग चलाने मैं इस त्रुटि मिलती है

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)

पता नहीं क्यों im कि अपवाद हो रही है

मेरी hibernate.cfg.xml है

<?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>

मेरी HibernateUtil वर्ग है

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();
}

मेरी ClassDAO है

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

और im भागने की कोशिश कर

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());
    } 
}

संपादित करें:

मेरी 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>

संपादित करें 2: तो, मुझे नहीं पता क्यों, लेकिन मैं बदल hibernate.cfg.xml और अब यह काम करता है, यहाँ यह है

<?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>

हल किया? हम देखेंगे

20/05/2017 को 00:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

मैं अपनी xml में अपने हाइबरनेट-विन्यास टैग बंद करने के लिए आवश्यकता हो सकती है लगता है।

20/05/2017 को 01:08
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more