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