Wiele unikalnych ograniczeń w JPA

84

Czy istnieje sposób określenia za pomocą JPA, że powinno istnieć wiele unikatowych ograniczeń w różnych zestawach kolumn?

@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;
}

Widziałem adnotację specyficzną dla hibernacji, ale staram się unikać rozwiązań specyficznych dla dostawcy, ponieważ wciąż decydujemy między hibernacją a jądrem danych.

Sójka
źródło

Odpowiedzi:

130

W @Table„S atrybut uniqueConstraintsfaktycznie przyjmie szereg z nich. Twój przykład jest tylko skrótem dla tablicy z jednym elementem. Inaczej wyglądałoby to tak:

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

Zawsze, gdy unikatowe ograniczenie jest oparte tylko na jednym polu, możesz użyć go @Column(unique=true)w tej kolumnie.

Bozho
źródło
2
Obecnie mam tę adnotację, ale wygląda na to, że Hibernate nie generuje indeksu dla tabeli, niezależnie od tego, czy tabela już istnieje (i jest ustawiona na aktualizację) lub jeśli usunę tabelę i pozwolę Hibernate automatycznie ją wygenerować. Czy coś mi brakuje?
Kevin M