Funciones de exportación e importación de datos con Hibernate

18-06-2013
 

copia_hibernate
Uno de los temas críticos de muchas aplicaciones es el de la importación y exportación de datos, aunque solamente sea para pasar de los distintos servidores de pre-producción a producción.

Este trozo de código muestra como utilizar la serialización para importar y exportar todo el modelo de datos utilizando Hibernate. Tenemos que partir de la base que las classes que mapean el modelo de datos implementan la interfície java.io.Serializable.

La primera de las dos funciones nos permite hacer un exportado de datos en un fichero de texto export.txt.

    private static Class[] cls=new Class[] {
                Factura.class,
                Cliente.class,
		Albaran.class
		/* Enumeración de classes del modelo que se van a tratar */
                };


    public static void exportData() {
	/* Obtenemos la sesión de hibernate */

	try {
            FileOutputStream fos = new FileOutputStream("export.txt");
            ObjectOutputStream oos = new ObjectOutputStream( fos );

            Session session=HibernateUtil.getSessionFactory().openSession();

            for ( Class c:cls ) {
                Criteria q1 = session.createCriteria( c );
                List l=q1.list();

                System.out.println( "Exporting "+c );

                for( Object o:l ) {
                            oos.writeObject(o);
                    }
                }

            session.close();

            oos.close();
            fos.close();
        } catch (Exception ex) { ex.printStackTrace(); }

        }

Y finalmente la segunda función borra todo el modelo de datos y importa los datos del fichero export.txt.

    public static void importData() {
	/* Obtenemos la sesión de hibernate */
	Session session=HibernateUtil.getSessionFactory().openSession();

	try {
		FileInputStream fis = new FileInputStream("export.txt");
		ObjectInputStream ois = new ObjectInputStream( fis );

		session.beginTransaction();

		for ( Class c:cls ) {
			Criteria q1 = session.createCriteria( c );
			List l=q1.list();

			System.out.println( "Truncating "+c );

			for( Object o:l ) 
				session.delete(o);
			}

		try {
			while (true) {
				Object o=ois.readObject();
				System.out.println( "Importing register "+o );
				session.save( o );
				}
		} catch ( java.io.EOFException eoee ) {}

		session.getTransaction().commit();
		session.close();

		ois.close();
		fis.close();
        } catch (Exception ex) {
		session.close();
		ex.printStackTrace();
		}

        }

Leave a Reply

© Albert Coronado Calzada