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.

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.