I have a program that manages a table called Seguro.
The Safe class:
package ejercicio01;
import java.io.Serializable;
import javax.persistence.*;
import java.util.GregorianCalendar;
@Entity
@Table(name="Seguro")
public class Seguro implements Serializable{
@Id
@Column(name="id")
int id;
@Column(name="nif")
String nif;
@Column(name="nombre")
String nombre;
@Column(name="ape1")
String ape1;
@Column(name="ape2")
String ape2;
@Column(name="edad")
int edad;
@Column(name="numHijos")
int numHijos;
@Column(name="fechaCreacion")
GregorianCalendar fechaCreacion;
public Seguro(){}
public Seguro(int id, String nif, String nombre, String ape1, String ape2, int edad, int numHijos, GregorianCalendar fechaCreacion) {
this.id = id;
this.nif = nif;
this.nombre = nombre;
this.ape1 = ape1;
this.ape2 = ape2;
this.edad = edad;
this.numHijos = numHijos;
this.fechaCreacion = fechaCreacion;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNif() {
return nif;
}
public void setNif(String nif) {
this.nif = nif;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApe1() {
return ape1;
}
public void setApe1(String ape1) {
this.ape1 = ape1;
}
public String getApe2() {
return ape2;
}
public void setApe2(String ape2) {
this.ape2 = ape2;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public int getNumHijos() {
return numHijos;
}
public void setNumHijos(int numhijos) {
this.numHijos = numhijos;
}
public GregorianCalendar getFechaCreacion() {
return fechaCreacion;
}
public void setFechaCreacion(GregorianCalendar fechaCreacion) {
this.fechaCreacion = fechaCreacion;
}
}
This class will be handled by another call PersistenceSecure:
package ejercicio01;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class PersistenciaSeguro{
SessionFactory sessionFactory;
Configuration configuration;
ServiceRegistry serviceRegistry;
Session session;
public void PersistenciaSeguro(){
configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
}
public void insertSeguro(Seguro s){
session.beginTransaction();
session.save(s); // El objeto queda guardado en la base de datos.
session.getTransaction().commit();
session.close();
}
public Seguro getSeguro(int id){
session.beginTransaction();
Seguro s=(Seguro)session.get(Seguro.class,id);
session.getTransaction().commit();
session.close();
return s;
}
public void updateSeguro(Seguro s, String nombre, String apellido1, String apellido2, int edad, int hijos){
session.beginTransaction();
s.nombre=nombre;
s.ape1=apellido1;
s.ape2=apellido2;
s.edad=edad;
s.numHijos=hijos;
session.getTransaction().commit();
session.close();
}
public void deleteSeguro(int id){
session.beginTransaction();
Seguro s=(Seguro)session.get(Seguro.class,id);
session.delete(s);
session.getTransaction().commit();
session.close();
}
}
And it is tested in the main file, called Exercise01:
package ejercicio01;
import java.util.GregorianCalendar;
public class Ejercicio01{
public static void main(String[] args){
GregorianCalendar f1=new GregorianCalendar(2013,2,23);
GregorianCalendar f2=new GregorianCalendar(2015,4,10);
Seguro s1=new Seguro(1,"23409876e","Paco","Maestre","Torreblanca",34,0,f1);
Seguro s2=new Seguro(2,"90873456q","Sandra","Illazquez","Pereira",26,1,f2);
PersistenciaSeguro a=new PersistenciaSeguro();
a.insertSeguro(s1);
a.insertSeguro(s2);
Seguro s3=a.getSeguro(1);
System.out.println(s3.edad);
a.updateSeguro(s2, "Alicia", "Calvo", "Sotelo", 26, 3);
System.out.println(s2.numHijos);
a.deleteSeguro(1);
a.deleteSeguro(2);
}
}
Apart is the hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/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/hibernate1</property>
<property name="connection.username">daniel</property>
<property name="connection.password">patochalado</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">true</property>
<mapping class="ejercicio01.Seguro"/>
</session-factory>
</hibernate-configuration>
And one persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="Ejercicio01PU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hibernate1?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="daniel"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
When I run the program, I run into this:
From what I have checked, the error is in the session = sessionFactory.openSession (); , in the Persistence-Safe contructor. What will be wrong now?
Edit: I have reviewed bugs in the PersistenceSafe table.
package ejercicio01;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class PersistenciaSeguro{
SessionFactory sessionFactory;
Configuration configuration;
ServiceRegistry serviceRegistry;
Session session;
public void PersistenciaSeguro(){
configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
public void insertSeguro(Seguro s){
session = sessionFactory.openSession();
session.beginTransaction();
session.save(s); // El objeto queda guardado en la base de datos.
session.getTransaction().commit();
session.close();
}
public Seguro getSeguro(int id){
session = sessionFactory.openSession();
session.beginTransaction();
Seguro s=(Seguro)session.get(Seguro.class,id);
session.close();
return s;
}
public void updateSeguro(Seguro s, String nombre, String apellido1, String apellido2, int edad, int hijos){
session = sessionFactory.openSession();
session.beginTransaction();
s.nombre=nombre;
s.ape1=apellido1;
s.ape2=apellido2;
s.edad=edad;
s.numHijos=hijos;
session.update(s); // Esto confirmara nuestras modificaciones.
session.getTransaction().commit(); // Tras cambiar el objeto, almacenamos el cambio.
session.close();
}
public void deleteSeguro(int id){
session = sessionFactory.openSession();
session.beginTransaction();
Seguro s=(Seguro)session.get(Seguro.class,id);
session.delete(s);
session.getTransaction().commit();
session.close();
}
}
I have tried to handle the Secure class directly in the main file and it works correctly. The failure occurs if I do it in PersistenceSecure.
The current error message:
Exception in thread "main" java.lang.NullPointerException
at ejercicio01.PersistenciaSeguro.insertSeguro(PersistenciaSeguro.java:24)
at ejercicio01.Ejercicio01.main(Ejercicio01.java:31)
C:\Users\pcx\AppData\Local\NetBeans\Cache.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
Edit: I have tried to modify the insertSecure method so that it has a try:
public void insertSeguro(Seguro s){
System.out.println(s.getApe1());
try{
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(s); // El objeto queda guardado en la base de datos.
session.getTransaction().commit();
session.close();
}
catch(Exception e){System.out.println("Se produjo un error: "+e.getMessage());}
}
The new execution message:
Maestre
Se produjo un error: null
Exception in thread "main" java.lang.NullPointerException
Illazquez
Se produjo un error: null
at ejercicio01.PersistenciaSeguro.getSeguro(PersistenciaSeguro.java:36)
at ejercicio01.Ejercicio01.main(Ejercicio01.java:34)
C:\Users\pcx\AppData\Local\NetBeans\Cache.2\executor-snippets\run.xml:53: Java returned: 1
This tells me that executing session = sessionFactory.openSession (); causes a null error, but I do not know what I'm doing wrong.