2011-11-23 6 views
38

Ésta es mi modelo:Creación de un compuesto limitaciones únicos en múltiples columnas

class User {...} 
class Book { 
    User author; 
    int number; 
} 

Cada número del libro comienza a 1 por autor y los incrementos hacia arriba. Así que tendremos los Libros 1,2,3 de John Grisham, Libro 1..5 de George Martin, etc ...

¿Existe una restricción única que pueda colocar en Book, que garantice que no lo hagamos? tener dos libros con el mismo número por el mismo autor? Similar a @Column(unique = true), pero la restricción solo se aplica en el compuesto de Author X number?

+0

Posible duplicado de [¿Cómo introducir la restricción de varias columnas con anotaciones JPA?] (Http://stackoverflow.com/questions/2772470/how-to-introduce-multi-column-constraint-with-jpa-annotaciones) –

Respuesta

79

Uso @UniqueConstraint:

@Table(
    uniqueConstraints= 
     @UniqueConstraint(columnNames={"author_id", "number"}) 
) 
@Entity 
class Book extends Model { 
    @ManyToOne 
    @JoinColumn(name = "author_id") 
    User author; 
    int number; 
} 
+0

¿qué tal hacer autor y número @id como FK? –

+1

y para múltiples Restricciones únicas compuestas, la sintaxis es @Table (uniqueConstraints = {@UniqueConstraint (columnNames = {"field1", \t \t "field2", "field3"}), @UniqueConstraint (columnNames = {"field4", " field5 "})}) ) – Manu

+0

Al agregar esta restricción única, hibernación ya no puede crear mi tabla cuando implemente la aplicación. ¿Puedes ayudar a algunos? – Adelin

3

Cuando se crea la tabla antes, es necesario retirarlo. La clave única no se agrega a la tabla existente.

Cuestiones relacionadas