Próbuję wprowadzić ograniczenie wieloprzyciskowe na obiekt mapowany na JPA:
public class InventoryItem {
@Id
private Long id;
@Version
private Long version;
@ManyToOne
@JoinColumn("productId")
private Product product;
@Column(nullable=false);
private long serial;
}
Zasadniczo para (produkt, numer seryjny) powinna być unikalna, ale znalazłem tylko sposób, aby powiedzieć, że seria powinna być unikalna. To oczywiście nie jest dobry pomysł, ponieważ różne produkty mogą mieć takie same numery seryjne.
Czy istnieje sposób na wygenerowanie tego ograniczenia przez JPA, czy jestem zmuszony do ręcznego utworzenia go w bazie danych?
Jak już odpowiedziałem, indeks wielokolumnowy można dodać za pomocą
@Table
adnotacji. JednakcolumnNames
musi to być nazwa rzeczywistych kolumn bazy danych, a nie atrybut klasy. Tak więc, jeśli kolumna wygląda następująco:@Column(name="product_id") Long productId;
Następnie
@Table
adnotacja powinna wyglądać następująco@Table(uniqueConstraints= @UniqueConstraint(columnNames = {"product_id", "serial"})
źródło