Volver a la página principal
viernes 11 octubre 2024
85

Cómo crear una clave unique compuesta en Spring Boot

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.

Definición de una clave compuesta con JPA

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:

Ejemplo básico

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.

Otros ejemplos de claves únicas compuestas

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;
   }

Referencia

Para más detalles sobre las anotaciones JPA y restricciones de unicidad, consulta la documentación oficial de Spring.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer