La anotación @Table en Spring Boot se utiliza para personalizar el nombre y la configuración de la tabla de base de datos que se asocia a una clase anotada con @Entity. Al usar @Table, es posible especificar atributos como el nombre de la tabla, el esquema de la base de datos, y las configuraciones únicas o de índices para mejorar la organización y rendimiento de las consultas.
@Table es una anotación de la especificación JPA (Java Persistence API) que se aplica a clases que también están anotadas con @Entity. Se usa para definir detalles adicionales sobre cómo se mapea la entidad a una tabla de base de datos. Por defecto, el nombre de la tabla se deriva del nombre de la clase de entidad, pero @Table permite especificar un nombre diferente y realizar ajustes adicionales.
name: Define el nombre de la tabla en la base de datos.
schema: Especifica el esquema de la base de datos donde se encuentra la tabla.
catalog: Permite especificar el catálogo de la base de datos.
uniqueConstraints: Define restricciones de unicidad en una o más columnas.
indexes: Permite definir índices en columnas específicas.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "usuarios") // Cambia el nombre de la tabla a "usuarios"
public class Usuario {
@Id
private Long id;
private String nombre;
private String correo;
// Getters y Setters
}
En este ejemplo:
Usuario se mapea a la tabla usuarios en la base de datos gracias a la configuración de @Table(name = "usuarios").
Usuario por defecto.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "empleados", schema = "empresa") // Define el esquema y nombre de la tabla
public class Empleado {
@Id
private Long id;
private String nombre;
private String puesto;
// Getters y Setters
}
En este caso:
empleados se creará dentro del esquema empresa.
import javax.persistence.*;
@Entity
@Table(
name = "productos",
uniqueConstraints = @UniqueConstraint(columnNames = "codigo"), // Código único
indexes = @Index(name = "idx_nombre_producto", columnList = "nombre") // Índice en la columna "nombre"
)
public class Producto {
@Id
private Long id;
private String nombre;
private String codigo;
// Getters y Setters
}
En este ejemplo:
@UniqueConstraint(columnNames = "codigo") asegura que el campo codigo sea único dentro de la tabla productos.
@Index(name = "idx_nombre_producto", columnList = "nombre") crea un índice en la columna nombre para optimizar las consultas basadas en ese campo.
@Table con un catálogo de base de datos
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "departamentos", catalog = "organizacion") // Define un catálogo específico
public class Departamento {
@Id
private Long id;
private String nombre;
// Getters y Setters
}
En este ejemplo:
@Table(catalog = "organizacion") indica que la tabla departamentos se encuentra dentro del catálogo organizacion.
catalog es útil para bases de datos grandes que agrupan esquemas dentro de catálogos específicos.
Se debe usar @Table cuando:
1. Deseas personalizar el nombre de la tabla y no quieres que coincida con el nombre de la clase.
2. Trabajas con múltiples esquemas y necesitas especificar uno en particular.
3. Quieres establecer restricciones de unicidad o índices personalizados para mejorar el rendimiento de las consultas.
4. Necesitas definir catálogos específicos dentro de una base de datos.
Aunque @Entity y @Table se usan juntas, tienen propósitos diferentes:
@Entity: Indica que una clase es una entidad que debe ser gestionada por JPA y que corresponde a una tabla en la base de datos.
@Table: Personaliza cómo se mapea la entidad a la tabla de la base de datos, permitiendo ajustar nombres, esquemas, catálogos, restricciones e índices.
Para obtener más detalles sobre la anotación @Table, consulta la documentación oficial de JPA.
Jorge García
Fullstack developer