Mam dwa pola klasy encji, które nie powinny być unikatowe, ale zamiast tego powinny być używane jako pola złożone dla klucza, który sam musi być unikalny. Na przykład mam dwa pola (nazwę i wersję), które mogą być takie same dla innych rekordów, ale razem muszą być unikalne. Jaki jest najlepszy sposób na to, używając Hibernate (z adnotacjami)? Używam Hibernate Validator dla innych pól, ale nie jestem pewien, w jaki sposób użyć tego do sprawdzenia, czy dwa pola razem tworzą unikalny klucz. Używam ogólnej klasy encji, która ma ogólny typ identyfikatora, który można zamienić na klasę klucza złożonego, ale muszę jeszcze sprawić, aby działała bardzo dobrze.Jak uzyskać unikalny klucz dla dwóch pól z Hibernacja?
Odpowiedz
To stworzy unikalny klucz w bazie danych:
@Table(name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "VERSION" }) })
To będzie egzekwowane przez bazę danych na aktualizację lub utrzymywać.
Musisz napisać własny, niestandardowy weryfikator, jeśli chcesz wymusić to za pomocą narzędzia Hibernate Validator.
i co powinno być napisane w encji jako pk? ... jeśli pk jest nazwą i wersją –
@ yoav.str - Jeśli PK jest nazwą i wersją, powinieneś zamiast tego użyć złożonego klucza podstawowego z @ Id/@ IdClass lub @ EmbeddedId/@ Embeddable – mtpettyp
To działało dla mnie przy użyciu Hibernuj 3.6.3.Final. Dzięki! – Jorge
Zazwyczaj zawijamy dwa pola w wewnętrznej klasie klucza oznaczonej jako @Embeddable. Na przykład:
@Entity
public class Foo {
@EmbeddedId()
private Key key;
...
@Embeddable
public static class Key {
@Column(nullable=false)
private String name;
@Column(nullable=false)
private int version;
protected Key() {
// for hibernate
}
public Key (String name, int version) {
this.name = name;
this.version = version;
}
...
// You probably want .equals and .hashcode methods
}
}
- 1. SQLite unikalny klucz z kombinacją dwóch kolumnach
- 2. Jak sprawdzić poprawność dwóch pól dla unikalności
- 3. Solr Composite unikalny klucz z istniejących pól w schemacie
- 4. datamapper unikalny indeks wielu pól
- 5. Jak usunąć unikalny klucz z tabeli mysql
- 6. Jak utworzyć unikalny klucz dla słownika w języku Python
- 7. Walidacja sqlalchemy dla dwóch pól
- 8. MySQL - unikalny klucz złożony z datetime
- 9. Update_or_create przyzwyczajenie respektować unikalny klucz
- 10. Jak uzyskać unikalny identyfikator JVM?
- 11. Jak dodać unikalny klucz do istniejącej tabeli (z wierszami niejednoznacznymi)
- 12. SQLAlchemy zmiana jeśli unikalny klucz istnieje
- 13. elasticsearch pasują do dwóch pól
- 14. Łączenie dwóch pól
- 15. Jak uzyskać wiele pól dla options_from_collection_for_select
- 16. Jak uzyskać identyfikator unikalny urządzenia dla systemu Windows 8.1?
- 17. Szyny 3 Suma Produkt z dwóch pól
- 18. Łączenie dwóch nie-kluczowych pól
- 19. Django @staticmethod suma dwóch pól
- 20. Hibernacja: Jak uzyskać wynik z zapytania z wieloma klasami
- 21. Opisywanie sumą dwóch pól pomnożone
- 22. Zamówienie według sumy dwóch pól
- 23. Jak uzyskać minimalny klucz z zależności funkcjonalnych?
- 24. Jak określić, czy dany klucz jest unikalny w multimapie?
- 25. Jak uzyskać klucz ModelState elementu w liście
- 26. Jak uzyskać wartość przez klucz z JObject?
- 27. Współbieżność z Hibernacja na wiosnę
- 28. Wtyczka jQuery Validate, wymagane jest jedno z dwóch pól
- 29. Jak uzyskać niedopasowane rekordy z dwóch tabel
- 30. Jak uzyskać przecięcie dwóch CGPath?
Czy chcesz "wyjątkowe ograniczenie" na dwóch kolumnach lub "klucz podstawowy" na stole, który składa się z dwóch kolumn? –
Chcę unikalne ograniczenie na dwie kolumny. Na przykład kombinacja nazwy i wersji musi być unikalna. Tak więc mógłbym mieć dwa zapisy w tabeli z rekordem nr 1 (imię = abc/wersja = 1) i z rekordem nr 2 (imię = abc/wersja = 2), ale nie dwa rekordy w tabeli z rekordem nr 1 (nazwa = abc/version = 1) i z rekordem # 2 (name = abc/version = 1). –