En Spring Boot, puedes definir una clave única compuesta utilizando anotaciones JPA (Java Persistence API) en tus entidades. Esto es especialmente útil cuando necesitas garantizar la unicidad de más de un campo en una tabla de base de datos.
Para crear una clave única compuesta en Spring Boot, necesitas utilizar la anotación @UniqueConstraint
dentro de @Table
. La clave única compuesta se define a nivel de clase en la entidad JPA y se compone de múltiples campos. Aquí se muestra cómo puedes hacerlo:
import javax.persistence.*;
@Entity
@Table(name = "producto", uniqueConstraints = {
@UniqueConstraint(columnNames = {"codigo", "nombre"})
})
public class Producto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String codigo;
@Column(nullable = false)
private String nombre;
// Getters y Setters
}
En este ejemplo, se crea una tabla producto
con una restricción única sobre las columnas codigo
y nombre
. Esto asegura que no haya dos productos con la misma combinación de codigo
y nombre
en la base de datos.
1. Combinación de IDs: Cuando quieres asegurarte de que la combinación de varios IDs es única.
@Entity
@Table(name = "ordenes", uniqueConstraints = {
@UniqueConstraint(columnNames = {"usuario_id", "producto_id"})
})
public class Orden {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private Long usuario_id;
@Column(nullable = false)
private Long producto_id;
// Otros campos y métodos
}
2. Campos de texto: Asegurar la combinación única de campos como email
y username
.
@Entity
@Table(name = "usuarios", uniqueConstraints = {
@UniqueConstraint(columnNames = {"email", "username"})
})
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String username;
}
Para más detalles sobre las anotaciones JPA y restricciones de unicidad, consulta la documentación oficial de Spring.
Jorge García
Fullstack developer