Anotación @UniqueConstraint en Java

3 minutos de lectura

avatar de usuario
xyz

Tengo un bean de Java. Ahora, quiero estar seguro de que el campo debe ser único.

Estoy usando el siguiente código:

@UniqueConstraint(columnNames={"username"})
public String username;

Pero estoy recibiendo un error:

@UniqueConstraint is dissallowed for this location

¿Cuál es la forma correcta de usar restricciones únicas?

Nota: Estoy usando marco de juego.

  • “Pero estoy recibiendo un error”. Siempre especifique qué error está obteniendo en la pregunta. Tiene información relevante que muy bien puede ayudarnos a resolver su problema, no se la guarde.

    – Jon Skeet

    27 de junio de 2010 a las 8:09


  • ¿Sería posible usar la anotación @id?

    – Pez espada albino

    27 de junio de 2010 a las 8:09

  • Maravilloso comentario Jon Skeet, ¡me alegró el día!

    – Gato Stimpson

    4 de febrero de 2021 a las 8:21

avatar de usuario
mdma

Para asegurarse de que un valor de campo sea único, puede escribir

@Column(unique=true)
String username;

La anotación @UniqueConstraint es para anotar varias claves únicas en el nivel de la tabla, por lo que aparece un error al aplicarla a un campo.

Referencias (JPA TopLink):

  • Es importante tener en cuenta que solo funcionará si permite que JPA cree sus tablas

    – naoru

    10 mayo 2018 a las 21:04

Puede usar a nivel de clase con la siguiente sintaxis

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
    @Column(name = "username")
    public String username;
}

avatar de usuario
francescom

Actualmente también estoy usando play framework con hibernate y anotación JPA 2.0 y este modelo funciona sin problemas

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})})
public class class_name {

@Id
@GeneratedValue
public Long id;

@NotNull
public Long id_1;

@NotNull
public Long id_2;

}

Espero haber ayudado.

  • Espero que no codifiques con estos campos en la vida real 😉

    – Gato Stimpson

    4 de febrero de 2021 a las 8:22

  • Por supuesto que no, pero escribo ejemplos con tales campos: D

    – FrancescoM

    16 de diciembre de 2021 a las 12:01

avatar de usuario
GlenPeterson

Nota: En Kotlin, la sintaxis para declarar las matrices en las anotaciones usa arrayOf(...) en vez de {...}

@Entity
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number"))))
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

Nota: A partir de Kotlin 1.2 es posible utilizar el [...] sintaxis para que el código sea mucho más simple

@Entity
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])])
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

avatar de usuario
Manjunath HM

camino1:

@Entity
@Table(name = "table_name", 
       uniqueConstraints={
                          @UniqueConstraint(columnNames = "column1"),
                          @UniqueConstraint(columnNames = "column2")
                         }
      )

-> Aquí tanto Column1 como Column2 actúan como restricciones únicas por separado. Ej: si en algún momento el valor de la columna 1 o el valor de la columna 2 coinciden, obtendrá un error UNIQUE_CONSTRAINT.

camino2:

@Entity
@Table(name = "table_name", 
       uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})

-> Aquí, los valores combinados de column1 y column2 actúan como restricciones únicas

avatar de usuario
TanvirChowdhury

@UniqueConstraint esta anotación se usa para anotar claves únicas o múltiples en el nivel de la tabla separadas por comas, por lo que obtiene un error. solo funcionará si permite que JPA cree sus tablas

Ejemplo

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder(builderClassName = "Builder", toBuilder = true)
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = {"person_id", "company_id"}))
public class AppUser extends BaseEntity {

    @Column(name = "person_id")
    private Long personId;

    @ManyToOne
    @JoinColumn(name = "company_id")
    private Company company;
}

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/UniqueConstraint.html

Por otro lado, para garantizar que un valor de campo sea único, puede escribir

@Column(unique=true)
String username;

avatar de usuario
Pradhan

   @Entity @Table(name = "stock", catalog = "mkyongdb",
   uniqueConstraints = @UniqueConstraint(columnNames =
   "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
   class Stock implements java.io.Serializable {

   }

Restricciones únicas utilizadas solo para crear una clave compuesta, que será única. Representará la tabla como clave principal combinada como única.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad