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.
@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) | NAME | SALARY |
|---|---|---|
| 101 | Ana García | 3500.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.
@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 |
|---|---|
| 10 | IT |
| 20 | HR |
🚫 ¡Mira! No hay columna de empleados aquí.
@Id private Long id;
private String name;
// Dueño de la relación
@ManyToOne
private DepartmentEntity department;
}
🔽 Tabla: EMPLOYEE
| ID | NAME | DEPARTMENT_ID (FK) |
|---|---|---|
| 101 | Juan | 10 |
| 102 | Maria | 10 |
✅ Aquí está la Foreign Key. Por eso es el "Dueño".
El Repositorio (JpaRepository)
Spring Data JPA implementa el acceso a datos por nosotros.
public interface EmployeeRepository
extends JpaRepository<EmployeeEntity, Long> {
// Métodos listos para usar:
// save(), findById(), findAll(), delete()…
}
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.
@Id Long id;
(
mappedBy = ""
)
List<DepartmentEntity> departments;
}
@Id Long id;
CompanyEntity ;
}
Escenario B: Department (1) ←→ Employee (N)
Un departamento tiene muchos empleados. Un empleado pertenece a un departamento.
@Id Long id;
(
mappedBy = ""
)
List<EmployeeEntity> employees;
}
@Id Long id;
DepartmentEntity ;
}