Estoy tratando de introducir una restricción de claves múltiples en una entidad mapeada por JPA:
public class InventoryItem {
@Id
private Long id;
@Version
private Long version;
@ManyToOne
@JoinColumn("productId")
private Product product;
@Column(nullable=false);
private long serial;
}
Básicamente, el par (producto, serie) debería ser único, pero solo encontré una manera de decir que la serie debería ser única. Obviamente, esto no es una buena idea ya que diferentes productos pueden tener los mismos números de serie.
¿Hay alguna forma de generar esta restricción a través de JPA o me veo obligado a crearla manualmente en la base de datos?
Como ya se respondió, el índice de varias columnas se puede agregar mediante la
@Table
anotación. Sin embargo,columnNames
debe ser el nombre de las columnas DB reales, no el atributo de clase. Entonces, si la columna es como la siguiente:@Column(name="product_id") Long productId;
Entonces la
@Table
anotación debería ser como la siguiente@Table(uniqueConstraints= @UniqueConstraint(columnNames = {"product_id", "serial"})
fuente