Hola de nuevo.
He añadido un flus antes y después del commit y nada
¿Será por que es una base de datos en memoria?
Aquí os dejo mi clase, a ver si veís algo raro. (Aunque esta en el tutorial de arriba, todo, es lo único que he usado).
Código:
package mx.uam.hibernate;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
public class ManejadorLibro {
private SessionFactory sessionFactory;
public ManejadorLibro() {
try {
System.out.println("Inicalizando Hibernate");
sessionFactory = new Configuration().configure().buildSessionFactory();
System.out.println("Terminada la inicializacion de Hibernate");
} catch (HibernateException e) {
e.printStackTrace();
}
}
private void agregaLibro(String titulo, String autor) {
try {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Libro libro = new Libro();
libro.setTitulo(titulo);
libro.setAutor(autor);
System.out.println("Valores a insertar " + autor + ", " + titulo);
session.save(libro);
session.flush();
tx.commit();
session.flush();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
private List listaLibros() {
try {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
// List result = session.find("from Libro");
List result = session.createQuery("from Libro").list();
System.out.println("Tamaño libreria: " + result.size());
tx.commit();
session.close();
return result;
} catch (HibernateException e) {
throw new RuntimeException(e.getMessage());
}
}
public static void main(String[] args) {
ManejadorLibro manejadorLibro = new ManejadorLibro();
// System.out.println("__| Parametros: " + args[0] + ", " + args[1] + " ," + args[2] + " __|");
if (args[0].equals("agrega")) {
if (args[1] != null && args[2] != null) {
manejadorLibro.agregaLibro(args[1], args[2]);
} else {
System.out.println("Faltan parametros");
}
} else if (args[0].equals("lista")) {
List libros = manejadorLibro.listaLibros();
for (int i = 0; i < libros.size(); i++) {
Libro libro = (Libro) libros.get(i);
System.out.println("Libro: " + libro.getTitulo() + ", Autor:" + libro.getAutor());
}
}
System.exit(0);
}
}
Si modifico el main, insertando y recuperando los datos a continuación, si funciona, de este modo:
Código:
public static void main(String[] args) {
ManejadorLibro manejadorLibro = new ManejadorLibro();
// System.out.println("__| Parametros: " + args[0] + ", " + args[1] + " ," + args[2] + " __|");
if (args[0].equals("agrega")) {
if (args[1] != null && args[2] != null) {
manejadorLibro.agregaLibro(args[1], args[2]);
List libros = manejadorLibro.listaLibros();
for (int i = 0; i < libros.size(); i++) {
Libro libro = (Libro) libros.get(i);
System.out.println("Libro: " + libro.getTitulo() + ", Autor:" + libro.getAutor());
}
} else {
System.out.println("Faltan parametros");
}
} else if (args[0].equals("lista")) {
List libros = manejadorLibro.listaLibros();
for (int i = 0; i < libros.size(); i++) {
Libro libro = (Libro) libros.get(i);
System.out.println("Libro: " + libro.getTitulo() + ", Autor:" + libro.getAutor());
}
}
System.exit(0);
}
¿Por qué?
¿Hay alguna propiedad del "cfg" que indique que los datos "no persistan" ?? no sé, ya no sé donde buscar.
Salu2 y gracias.