0

Estoy ahorita viendo la parte de anotaciones con Hibernate. Les muestro lo que tengo:

Aquí mi archivo de configuración llamado 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>
   <property name="connection.driver_class">com.mysql.jdbc.Driver</property>         
        <property name="connection.url">jdbc:mysql://localhost/pruebahibernate</property>     
        <property name="connection.username">hibernate</property>       
        <property name="connection.password">hibernate</property>     
        <property name="connection.pool_size">1</property>         
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>     
        <property name="show_sql">true</property>     
        <property name="hbm2ddl.auto">create-drop</property>      
        <mapping  class="hibernateanotaciones.Contacto" />  
    </session-factory>
</hibernate-configuration>

Aquí les muestro mi clase - entidad de nombre Contacto

package hibernateanotaciones;

import java.io.Serializable
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *
 * @author Jose
 */
@Entity
@Table(name="CONTACTOS")
public class Contacto implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private long id;
    @Column(name="NOMBRE", length = 24)
    private String nombre;
    @Column(name="EMAIL", length = 30)
    private String email;
    @Column(name="TELEFONO", length = 24)
    private String telefono;
public Contacto()
{
}

public Contacto(String nombre, String email, String telefono)
{
    this.nombre = nombre;
    this.email = email;
    this.telefono = telefono;
}

public String getEmail()
{
    return email;
}

public void setEmail(String email)
{
    this.email = email;
}

public long getId()
{
    return id;
}

private void setId(long id)
{
    this.id = id;
}

public String getNombre()
{
    return nombre;
}

public void setNombre(String nombre)
{
    this.nombre = nombre;
}

public String getTelefono()
{
    return telefono;
}

public void setTelefono(String telefono)
{
    this.telefono = telefono;
}
}

Tengo aquí mi clase utilitaria llamada HibernateUtil que me ayuda a iniciar la SessionFactory

package hibernateanotaciones;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil
{  
    private static final SessionFactory sessionFactory;   

    static 
    { 
        try 
        { 
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 
        } catch (HibernateException he) 
        { 
           System.err.println("Ocurrió un error en la inicialización de la SessionFactory: " + he); 
            throw new ExceptionInInitializerError(he); 
        } 
    }  

    public static SessionFactory getSessionFactory() 
    { 
        return sessionFactory; 
    } 
    }

Aqui tengo una clase llamada Conexion aqui es donde como tal acceso a mi SessionFactory

    package persistencia;

import hibernateanotaciones.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Jose
 */
public class Conexion {
    static Session sesion;
    static Transaction tx;

    public static void iniciaOperacion() throws HibernateException
{
    sesion = HibernateUtil.getSessionFactory().openSession();
    tx = sesion.beginTransaction();
}
    public static void manejaExcepcion(HibernateException he) throws HibernateException
{
    tx.rollback();
    throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he);
}
}

Bien aquí les dejo mi clase persistencia llamada ContactoDAO

package persistencia;
import hibernateanotaciones.Contacto;
import java.util.List;
import org.hibernate.HibernateException;
public class ContactoDAO {

public long guardarContacto(Contacto contacto)throws HibernateException
{
   long id=0;
   try
   {
       Conexion.iniciaOperacion();
       id=(Long)Conexion.sesion.save(contacto);
       Conexion.tx.commit();
   }catch(HibernateException he)
   {
       Conexion.manejaExcepcion(he);
       throw he;
   }
   finally
   {
       Conexion.sesion.close();
   }
   return id;
}
public void actualizarContacto(Contacto contacto) throws HibernateException
{
    try
    {
        Conexion.iniciaOperacion();
        Conexion.sesion.update(contacto);
        Conexion.tx.commit();
    }catch(HibernateException he)
    {
        Conexion.manejaExcepcion(he);
    }
    finally
    {
        Conexion.sesion.close();
    }
}
public void eliminarContacto(Contacto contacto) throws HibernateException
{
    try
    {
        Conexion.iniciaOperacion();
        Conexion.sesion.delete(contacto);
        Conexion.tx.commit();
    }catch(HibernateException he)
    {
        Conexion.manejaExcepcion(he);
    }
    finally
    {
        Conexion.sesion.close();
    }
}
public Contacto obtenerContacto(long idContacto) throws HibernateException
{
    Contacto contacto=null;
    try
    {
        Conexion.iniciaOperacion();
        contacto=(Contacto)Conexion.sesion.get(Contacto.class, idContacto);
        Conexion.tx.commit();
    }catch(HibernateException he)
    {
        Conexion.manejaExcepcion(he);
    }
    finally
    {
        Conexion.sesion.close();
    }
    return contacto;
}
public List<Contacto> listarContactos() throws HibernateException
{
    List<Contacto> listarContactos=null;
    try
    {
        Conexion.iniciaOperacion();
        listarContactos=Conexion.sesion.createQuery("from Contacto").list();
        Conexion.tx.commit();
    }catch(HibernateException he)
    {
        Conexion.manejaExcepcion(he);
    }
    finally
    {
        Conexion.sesion.close();
    }
    return listarContactos;
}

}

Un ejemplo de lo que hago en mi clase MAIN

import java.util.List;
import persistencia.ContactoDAO;

/**
 * @author Jose
 */
public class HibernateAnotaciones {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        long idConsultar=0;
        Contacto contactoRecuperado=null;

        Contacto contacto1=new Contacto("Maria", "maria@gmail.com", "02122344332");
        Contacto contacto2=new Contacto("Paco", "paco@gmail.com", "02121221332");
        Contacto contacto3=new Contacto("Luis", "luis@gmail.com", "02124432111");

        ContactoDAO contactoDAO=new ContactoDAO();
        idConsultar=contactoDAO.guardarContacto(contacto1);
        contactoDAO.guardarContacto(contacto2);
        contactoDAO.guardarContacto(contacto3);

        contacto2.setNombre("Petrolina");
        contactoDAO.actualizarContacto(contacto2);

        contactoRecuperado=contactoDAO.obtenerContacto(idConsultar);
        System.out.println("El contacto "+contactoRecuperado.getNombre()+" Se ha recuperado");

        contactoDAO.eliminarContacto(contactoRecuperado);

        List<Contacto> listarContacto=contactoDAO.listarContactos();
        System.out.println("Hay "+listarContacto.size()+" Contactos en la base de datos");

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



    }

}

El asunto es que cuando estoy intentando guardar me dice:

    INFO: HHH000206: hibernate.properties not found
Exception in thread "main" java.lang.NullPointerException
  at persistencia.ContactoDAO.guardarContacto(ContactoDAO.java:31)
  at hibernateanotaciones.HibernateAnotaciones.main(HibernateAnotaciones.java:29)
C:\Users\Jose\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

Estoy siguiendo un tutorial al pie de la letra pero no sé qué es lo que pasa. Estoy usando:

  • JDBC MYSQL 5.1.4
  • Hibernate 5
  • HibernateAnotation 3.4.0
Mariano
  • 23,777
  • 20
  • 70
  • 102
jose angarita
  • 530
  • 8
  • 20
  • Posible duplicado de [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – Pablo Lozano Apr 05 '19 at 10:41
  • Creo que alguno de los atributos de `Conexion` es null, posiblemente `tx` – Pablo Lozano Apr 05 '19 at 10:42

1 Answers1

0

Para mi que el problema consiste en los ID, el error es porque estas pidiendo un elemento que no existe. Prueba validando ese caso.

        if (id > 0) {
        System.out.print(id);
        }else{
        System.out.print("id esta vació!");
        }