2016-01-04 24 views
15

Jaka jest różnica między sprawdzania poprawności następujących trzech pól?Różnica między @ rozmiar, @ długość i @ kolumna (długość = wartość)

@Entity 
public class MyEntity { 

    @Column(name = "MY_FIELD_1", length=13) 
    private String myField1; 
    @Column(name = "MY_FIELD_2") 
    @Size(min = 13, max = 13) 
    private String myField2; 
    @Column(name = "MY_FIELD_3") 
    @Length(min = 13, max = 13) 
    private String myField3; 

    // getter & setter 

} 

Przeczytałem, że pierwszy dotyczy rzeczy DDL. Druga dotyczy sprawdzania fasoli. Trzeci dotyczy sprawdzania hibernacji.

Czy to prawda? To, czego wciąż nie rozumiem, to: kiedy muszę skorzystać z którego? Kiedy uruchamia się jedna z tych adnotacji?

Edytuj: Pomyśl o następującej sytuacji: Biorąc pod uwagę wymóg stworzenia jednostki z polem typu ciąg o długości 13. Które z wyżej wymienionych metod byś wybrał? Albo jeszcze lepiej: na jakie pytania musisz zadać sobie pytanie, które z nich pasuje do twoich celów?

+1

Kolumna nie ma nic wspólnego z WALIDACJĄ. Rozmiar to standard JPA. Długość jest zastrzeżona. Odpowiedź powinna być jasna ... @Size –

+0

Długość jest prawnie zastrzeżona? Więc nie wolno mi tego używać w ogóle? – Chris311

+0

Zgodnie z odpowiedzią jest to specyficzne dla Hibernacji rozszerzenie dostawcy. Nie ma sensu z niego korzystać (poza ludźmi, którzy bez żadnego powodu chcieliby przywiązać się do jednej implementacji JPA) –

Odpowiedz

33
  1. @Column jest adnotacji JPA i atrybut length jest używany przez narzędzie do generowania schematu dla utworzenia związanego długość kolumny SQL.
  2. @Size to adnotacja sprawdzania poprawności fasoli, która sprawdza, czy powiązany ciąg ma wartość, której długość jest ograniczona przez wartości minimalne i maksymalne.
  3. @Length jest Hibernate specyficzny adnotacji i ma takie samo znaczenie jak @Size

więc zarówno 2. i 3. Należy zatwierdzić długości łańcucha za pomocą Bean Validation. Wybrałbym 2., ponieważ jest ogólny.

+0

Używam plików mapowania hbm, więc 1 nie jest odpowiedni dla mnie, prawda? Kiedy używam opcji Rozmiar ponad długość lub czy mogę używać obu jednocześnie? – Chris311

+1

'@ Rozmiar' jest uniwersalny, zdefiniowany przez WZP. '@ Długość' jest dostępna tylko dla Hibernacji. –

+7

'@ Size' to __not__ w ogóle adnotacja JPA. Jest to adnotacja API Bean Validation! lepiej byłoby też powiedzieć "@ Column" to adnotacja JPA do użytku przez dostawcę JPA w generowaniu schematu (tylko), ponieważ jest to możliwe do wykorzystania przez wszystkich dostawców JPA. –