2010-06-27 22 views
106

Tengo un Java Bean. Ahora, quiero estar seguro de que el campo debe ser único. Estoy utilizando el código siguiente:@UniqueConstraint anotación en Java

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

Pero estoy recibiendo un error:

@UniqueConstraint is dissallowed for this location 

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

Nota: Estoy usando el marco de juego.

+11

"Pero estoy Consiguiendo un error." * Siempre * especifica qué error estás obteniendo en la pregunta. Tiene información relevante que puede ayudarnos a resolver su problema, no se la guarde para usted. –

+0

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

+0

publiqué el error ahora – xyz

Respuesta

276

Para asegurar un valor de campo es único puede escribir

@Column(unique=true) 
String username; 

La anotación @UniqueConstraint es para anotar varias claves únicas a nivel de tabla, por lo que se produce un error cuando se aplica a un campo.

Referencias (APP): TopLink

71

Se puede utilizar a nivel de clase con el siguiente sintaxis

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

Actualmente estoy usando marco juego también con hibernación 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 que haya ayudado.

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

    } 

limitaciones único que se utiliza sólo para la creación de clave compuesta, que será unique.It representará la tabla como clave primaria combinada como único.

9

Nota: En Kotlin la sintaxis para declarar las matrices en las anotaciones utiliza arrayOf(...) en lugar 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 su es posible utilizar la sintaxis [...] lo que el código se convierten mucho más simple

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

puede usar @UniqueConstraint en el nivel de clase, para prima combinada clave en una mesa por ejemplo:

@Entity 
@Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = { 
     @UniqueConstraint(columnNames = {"PRODUCT_ID"}) }) 

clase pública ProductAttribute {}

0

anotación único debe ser colocado justo encima de la declaración de atributo. UniqueContraints vaya a la anotación @Table encima de la declaración de la clase de datos.Ver más abajo:

@Entity @Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2")))) data class Action( @Id @GeneratedValue @Column(unique = true) val id: Long?, val col_1: Long?, val col_2: Long?, )

Cuestiones relacionadas