2011-11-23 15 views
38

To jest mój model:Tworzenie złożonych ograniczeń unikalne na wielu kolumnach

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

Każda liczba książka zaczyna się od 1 za autora i skokiem wzwyż. Więc będziemy mieli Książki 1,2,3 przez Johna Grishama, Książka 1..5 George'a Martina, itd ...

Czy istnieje wyjątkowe ograniczenie, które mogę umieścić na Book, które gwarantowałoby, że nie będziemy mieć dwie książki o tym samym numerze tego samego autora? Podobne do @Column(unique = true), ale ograniczenie dotyczy tylko kompozytu Author X number?

+0

Prawdopodobny duplikat [Jak wprowadzić więzy z wieloma kolumnami z adnotacjami JPA?] (Http://stackoverflow.com/questions/2772470/how-to-introduce-multi-column-constraint-with-jpa-annotations) –

Odpowiedz

79

Zastosowanie @UniqueConstraint:

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

co zrobić, aby autor i numer @id jak FK? –

+1

i dla wielu złożonych uniqueConstraints, składnia jest @Table (uniqueConstraints = {@UniqueConstraint (columnNames = {"field1", \t \t "field2", "field3"}), @UniqueConstraint (columnNames = {"field4", " field5 "})}) ) – Manu

+0

Dodanie tego unikalnego ograniczenia, hibernacja nie jest już w stanie utworzyć mojego stołu po wdrożeniu aplikacji. Czy możesz pomóc niektórym. – Adelin

3

Gdy tabela jest tworzona wcześniej, konieczne jest, aby ją usunąć. Unikalny klucz nie jest dodawany do istniejącej tabeli.

Powiązane problemy