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