← Artefactos
ISIS2603 · Persistencia

Persistencia con JPA

Mapeo ORM · Relaciones bidireccionales · Tablas resultantes

Del Objeto a la Tabla

Usamos Lombok (@Data) y JPA (@Entity). Observa cómo una clase simple se convierte en una estructura de base de datos.

Java Class @Data // Getters, Setters…
@Entity
public class EmployeeEntity {

  @Id
  private Long id;

  // JPA asume columna "name" VARCHAR
  private String name;

  // JPA asume columna "salary" DOUBLE
  private Double salary;
}

Tabla: EMPLOYEE_ENTITY

ID (PK)NAMESALARY
101Ana García3500.00

El nombre de la tabla y columnas se deriva automáticamente de la clase.

Mapeo Objeto vs. Base de Datos

Observa las tablas debajo del código. Nota quién tiene la columna extra (Foreign Key) y quién no.

1. Clase Java (Inversa) DepartmentEntity
public class DepartmentEntity {
  @Id private Long id;
  private String name;

  // Lista Referencial (No es columna)
  @OneToMany(
    mappedBy = "department",
    fetch = FetchType.LAZY
  )
  private List<EmployeeEntity> employees;
}

🔽 Tabla: DEPARTMENT

ID (PK)NAME
10IT
20HR

🚫 ¡Mira! No hay columna de empleados aquí.

2. Clase Java (Dueña) EmployeeEntity
public class EmployeeEntity {
  @Id private Long id;
  private String name;

  // Dueño de la relación
  @ManyToOne
  private DepartmentEntity department;
}

🔽 Tabla: EMPLOYEE

IDNAMEDEPARTMENT_ID (FK)
101Juan10
102Maria10

✅ Aquí está la Foreign Key. Por eso es el "Dueño".

El Repositorio (JpaRepository)

Spring Data JPA implementa el acceso a datos por nosotros.

@Repository
public interface EmployeeRepository
  extends JpaRepository<EmployeeEntity, Long> {

  // Métodos listos para usar:
  // save(), findById(), findAll(), delete()…
}
Simulador de Spring Boot
> Sistema iniciado…
🏆

Gran Reto de Asociaciones

Completa el código para dos escenarios distintos.

Escenario A: Company (1) ←→ Department (N)

Una compañía tiene muchos departamentos. Un departamento pertenece a una compañía.

class CompanyEntity {
  @Id Long id;
  (
    mappedBy = ""
  )
  List<DepartmentEntity> departments;
}
class DepartmentEntity {
  @Id Long id;
  
  CompanyEntity ;
}

Escenario B: Department (1) ←→ Employee (N)

Un departamento tiene muchos empleados. Un empleado pertenece a un departamento.

class DepartmentEntity {
  @Id Long id;
  (
    mappedBy = ""
  )
  List<EmployeeEntity> employees;
}
class EmployeeEntity {
  @Id Long id;
  
  DepartmentEntity ;
}