Commit inicial

This commit is contained in:
Isidoro Nevares Martín 2026-03-02 17:01:27 +01:00
parent 5fc6bf3198
commit f52ff6ecd5
10 changed files with 213 additions and 170 deletions

View File

@ -36,5 +36,22 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<projectDescription> <projectDescription>
<name>aadd_concesionario</name> <name>eedd_ra3_ejemplo2</name>
<comment></comment> <comment></comment>
<projects> <projects>
</projects> </projects>
@ -20,4 +20,15 @@
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures> </natures>
<filteredResources>
<filter>
<id>1772465433562</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription> </projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=false

View File

@ -4,5 +4,6 @@ org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.compiler.source=1.8

View File

@ -2,13 +2,10 @@ package org.lapaloma.concesionario;
import java.util.List; import java.util.List;
import org.hibernate.Session; import org.lapaloma.concesionario.dao.ICocheDAO;
import org.lapaloma.concesionario.conectores.GestorEntityManagerJPA; import org.lapaloma.concesionario.dao.impl.CocheDaoArray;
import org.lapaloma.concesionario.conectores.GestorSesionesHibernate;
import org.lapaloma.concesionario.vo.Coche; import org.lapaloma.concesionario.vo.Coche;
import jakarta.persistence.EntityManager;
/** /**
* *
* AppConcesionario: Clase que realiza el tratamiento de los coches de un * AppConcesionario: Clase que realiza el tratamiento de los coches de un
@ -22,59 +19,93 @@ import jakarta.persistence.EntityManager;
public class AppConcesionario { public class AppConcesionario {
private ICocheDAO iCocheDAO;
public static void main(String[] args) { public static void main(String[] args) {
AppConcesionario app = new AppConcesionario(); AppConcesionario app = new AppConcesionario();
try { app.inicializar();
app.realizarMigracionMySQLAObjectDB(); app.consultarCoches();
app.consultarPorId(3);
app.altaCoche();
app.actualizarCoche();
app.borrarCoche(2);
app.consultarCoches();
}
private void inicializar() {
iCocheDAO = new CocheDaoArray();
}
private void consultarCoches() {
try {
List<Coche> listaCoches = iCocheDAO.obtenerListaCoches();
System.out.println("#########################################");
System.out.println("LISTADO DE COCHES");
System.out.println("#########################################");
for (Coche coche : listaCoches) {
System.out.println(coche);
}
app.realizarMigracionMySQLAPostgreSQLConJPA();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private void realizarMigracionMySQLAObjectDB() throws Exception { private void consultarPorId(int id) {
// Obtener los coches de MySQL para guardarlos en ObjectDB System.out.println("#########################################");
Session sesionH = GestorSesionesHibernate.getSession(); System.out.println("CONSULTA POR ID: " + id);
List<Coche> listaCoches = sesionH.createQuery("FROM Coche", Coche.class).getResultList(); System.out.println("#########################################");
for (Coche coche : listaCoches) {
Coche coche = iCocheDAO.obtenerCochePorID(id);
if (coche != null) {
System.out.println(coche); System.out.println(coche);
EntityManager em = GestorEntityManagerJPA.getEntityManager();
Coche cocheODB = em.find(Coche.class, coche.getIdentificador());
// Si el coche no existe en ObjectDB, lo persisto; si existe, lo actualizo
if (cocheODB == null) {
em.getTransaction().begin();
em.persist(coche);
em.getTransaction().commit();
} else { } else {
em.getTransaction().begin(); System.out.println("No existe coche con id " + id);
em.merge(coche);
em.getTransaction().commit();
}
} }
} }
private void realizarMigracionMySQLAPostgreSQLConJPA() { private void altaCoche() {
// Obtener los coches de MySQL para guardarlos en PostreSQL System.out.println("#########################################");
EntityManager emMySQL = GestorEntityManagerJPA.getEntityManagerMySQL(); System.out.println("ALTA DE COCHE");
List<Coche> listaCoches = emMySQL.createQuery("FROM Coche", Coche.class).getResultList(); System.out.println("#########################################");
for (Coche coche : listaCoches) {
System.out.println(coche);
EntityManager emPostgreSQL = GestorEntityManagerJPA.getEntityManagerMySQL(); Coche nuevo = new Coche(8, "Toyota", "Corolla", 1.8);
Coche cochePostgreSQL = emPostgreSQL.find(Coche.class, coche.getIdentificador()); iCocheDAO.crearCoche(nuevo);
// Si el coche no existe en ObjectDB, lo persisto; si existe, lo actualizo
if (cochePostgreSQL == null) { System.out.println("Coche creado: " + nuevo);
emPostgreSQL.getTransaction().begin(); }
emPostgreSQL.persist(coche);
emPostgreSQL.getTransaction().commit(); private void actualizarCoche() {
System.out.println("#########################################");
System.out.println("ACTUALIZAR COCHE");
System.out.println("#########################################");
Coche cocheActualizado = new Coche(1, "Renault", "Megane RS", 2.0);
Coche resultado = iCocheDAO.actualizarCoche(cocheActualizado);
if (resultado != null) {
System.out.println("Coche actualizado: " + resultado);
} else { } else {
emPostgreSQL.getTransaction().begin(); System.out.println("No se encontró el coche para actualizar");
emPostgreSQL.merge(coche); }
emPostgreSQL.getTransaction().commit(); }
private void borrarCoche(int id) {
System.out.println("#########################################");
System.out.println("BORRAR COCHE ID: " + id);
System.out.println("#########################################");
Coche coche = iCocheDAO.obtenerCochePorID(id);
if (coche != null) {
iCocheDAO.borrarCoche(coche);
System.out.println("Coche borrado correctamente");
} else {
System.out.println("No existe coche con id " + id);
} }
} }
} }
}

View File

@ -1,52 +0,0 @@
package org.lapaloma.concesionario.conectores;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
/**
*
* GestorEntityManagerJPA: Clase que realiza la gestión de EntityManagers de JPA.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 4 dic 2025
*
*
*/
public class GestorEntityManagerJPA {
private static EntityManagerFactory entityManagerFactory = null;
private static EntityManagerFactory entityManagerFactoryMySQL = null;
private static EntityManagerFactory entityManagerFactoryPostgreSQKL = null;
private GestorEntityManagerJPA() { // Constructor privado para evitar instanciación
}
// Carga la configuración desde META-INF/persistence.xml
static {
try {
entityManagerFactory = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_ODB");
entityManagerFactoryMySQL = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_MYSQL");
entityManagerFactoryPostgreSQKL = Persistence.createEntityManagerFactory("UP_CONCESIONARIO_POSTGRESQL");
} catch (Throwable ex) {
System.err.println("Error en EntityManagerFactory: " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager();
}
public static EntityManager getEntityManagerMySQL() {
return entityManagerFactoryMySQL.createEntityManager();
}
public static EntityManager getEntityManagerPostgreSQL() {
return entityManagerFactoryPostgreSQKL.createEntityManager();
}
public static void closeEntityManagerFactory() {
entityManagerFactory.close();
}
}

View File

@ -1,46 +0,0 @@
package org.lapaloma.concesionario.conectores;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* GestorSesionesHibernate: Clase que realiza la gestión de sesiones Hibernate.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 4 dic 2025
*
*
*/
public class GestorSesionesHibernate {
private static SessionFactory sessionFactory = null;
private GestorSesionesHibernate() { // Constructor privado para evitar instanciación
}
// Carga la configuración desde hibernate.cfg.xml
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Error en SessionFactory: " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() {
return sessionFactory.openSession();
}
public static Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
public static void closeFactoria() {
if (sessionFactory != null) {
sessionFactory.close();
}
}
}

View File

@ -0,0 +1,14 @@
package org.lapaloma.concesionario.dao;
import java.util.List;
import org.lapaloma.concesionario.vo.Coche;
public interface ICocheDAO {
public Coche obtenerCochePorID(int identificador) ;
public Coche actualizarCoche(Coche coche) ;
public Coche crearCoche(Coche coche);
public void borrarCoche(Coche coche);
public List<Coche> obtenerListaCoches();
public List<Coche> obtenerCochePorModelo(String modelo);
}

View File

@ -0,0 +1,74 @@
package org.lapaloma.concesionario.dao.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.lapaloma.concesionario.dao.ICocheDAO;
import org.lapaloma.concesionario.vo.Coche;
public class CocheDaoArray implements ICocheDAO {
private List<Coche> listaCoches;
public CocheDaoArray() {
listaCoches = new ArrayList<>();
// Simulamos los inserts de la base de datos
listaCoches.add(new Coche(1, "Renault", "Megane", 1.5));
listaCoches.add(new Coche(2, "Seat", "León", 1.6));
listaCoches.add(new Coche(3, "Suzuki", "Vitara", 1.9));
listaCoches.add(new Coche(4, "Seat", "Clio", 1.4));
listaCoches.add(new Coche(5, "Seat", "Ibiza", 1.4));
listaCoches.add(new Coche(6, "Peugeot", "308", 2.0));
listaCoches.add(new Coche(7, "Renault", "Megane", 1.5));
}
@Override
public Coche obtenerCochePorID(int identificador) {
Coche coche = null;
for (Coche cocheLista : listaCoches) {
if (cocheLista.getIdentificador() == identificador) {
coche = cocheLista;
break;
}
}
return coche;
}
@Override
public Coche actualizarCoche(Coche coche) {
Coche cocheActualizado = null;
for (int i = 0; i < listaCoches.size(); i++) {
if (listaCoches.get(i).getIdentificador() == coche.getIdentificador()) {
listaCoches.set(i, coche);
cocheActualizado = coche;
break;
}
}
return cocheActualizado; // no encontrado
}
@Override
public Coche crearCoche(Coche coche) {
// Opcional: comprobar que no exista el ID
listaCoches.add(coche);
return coche;
}
@Override
public void borrarCoche(Coche coche) {
listaCoches.removeIf(c -> c.getIdentificador() == coche.getIdentificador());
}
@Override
public List<Coche> obtenerListaCoches() {
return new ArrayList<>(listaCoches); // devolvemos copia
}
@Override
public List<Coche> obtenerCochePorModelo(String modelo) {
return listaCoches.stream().filter(c -> c.getModelo().equalsIgnoreCase(modelo)).collect(Collectors.toList());
}
}

View File

@ -1,9 +1,5 @@
package org.lapaloma.concesionario.vo; package org.lapaloma.concesionario.vo;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
/** /**
* *
* Coche: Clase de persistencia que representa un coche de un concesionario. * Coche: Clase de persistencia que representa un coche de un concesionario.
@ -13,52 +9,47 @@ import jakarta.persistence.Table;
* *
* *
*/ */
@Entity
@Table(name = "T_COCHE")
public class Coche { public class Coche {
@Id
private int identificador; private int identificador;
private String marca; private String marca;
private String modelo; private String modelo;
private double cilindrada; private double cilindrada;
public Coche(int identificador, String marca, String modelo, double cilindrada) {
super();
this.identificador = identificador;
this.marca = marca;
this.modelo = modelo;
this.cilindrada = cilindrada;
}
public int getIdentificador() { public int getIdentificador() {
return identificador; return identificador;
} }
public void setIdentificador(int identificador) { public void setIdentificador(int identificador) {
this.identificador = identificador; this.identificador = identificador;
} }
public String getMarca() { public String getMarca() {
return marca; return marca;
} }
public void setMarca(String marca) { public void setMarca(String marca) {
this.marca = marca; this.marca = marca;
} }
public String getModelo() { public String getModelo() {
return modelo; return modelo;
} }
public void setModelo(String modelo) { public void setModelo(String modelo) {
this.modelo = modelo; this.modelo = modelo;
} }
public double getCilindrada() { public double getCilindrada() {
return cilindrada; return cilindrada;
} }
public void setCilindrada(double cilindrada) { public void setCilindrada(double cilindrada) {
this.cilindrada = cilindrada; this.cilindrada = cilindrada;
} }
@Override @Override
public String toString() { public String toString() {
return "Coche [identificador=" + identificador + ", marca=" + marca + ", modelo=" + modelo + ", cilindrada=" return "Coche [identificador=" + identificador + ", marca=" + marca + ", modelo=" + modelo + ", cilindrada="
+ cilindrada + "]"; + cilindrada + "]";
} }
} }