Múltiples restricciones únicas en JPA

84

¿Hay alguna forma de especificar usando JPA que debería haber múltiples restricciones únicas en diferentes conjuntos de columnas?

@Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    // Unique on username
    public String username;

    public String name;
    public String email;
}

He visto una anotación específica de hibernación, pero estoy tratando de evitar soluciones específicas del proveedor ya que todavía estamos decidiendo entre hibernación y núcleo de datos.

Arrendajo
fuente

Respuestas:

130

El @Tableatributo de en uniqueConstraintsrealidad acepta una serie de estos. Su ejemplo es solo una abreviatura de una matriz con un solo elemento. De lo contrario, se vería así:

@Table(name="person",  uniqueConstraints={
   @UniqueConstraint(columnNames={"code", "uid"}),
   @UniqueConstraint(columnNames={"anotherField", "uid"})
})

Siempre que la restricción única se base solo en un campo, puede usarla @Column(unique=true)en esa columna.

Bozho
fuente
2
Actualmente tengo esta anotación, pero parece que Hibernate no está generando el índice para la tabla si la tabla ya existe (y está configurada para actualizarse) o si elimino la tabla y dejo que Hibernate la genere automáticamente. ¿Me estoy perdiendo de algo?
Kevin M