2016-01-04 4 views
15

В чем разница между проверкой проверки следующих трех полей?Разница между @Size, @Length и @Column (length = value)

@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 

} 

Я читал, что первый из них связан с материалом DDL. Второй - для проверки боба. Третий - для проверки спящего режима.

Верно ли это? Я все еще не понимаю: когда я должен использовать какой? Когда запускается одна из этих аннотаций?

Редактировать: Подумайте о следующей ситуации: Учитывая требование разработать сущность с полем типа string длиной 13. Какой из вышеупомянутых методов вы бы выбрали? Или еще лучше: на какие вопросы вы должны попросить себя выяснить, какой из них подходит вашим целям?

+1

Столбец не имеет ничего общего с VALIDATION. Размер - стандарт JPA. Длина запатентована. Ответ должен быть ясен из этого ... @Size –

+0

Длина является запатентованной? Так что мне не разрешено использовать это вообще? – Chris311

+0

Как говорится в ответе, это расширение поставщика Hibernate. Не имеет смысла использовать его (кроме людей, которые хотели бы привязать себя к одной реализации JPA без причины) –

ответ

33
  1. @Column является аннотациями JPA, и атрибут length используется инструментом генерации схемы, чтобы установить соответствующую длину столбца данных SQL.
  2. @Size - аннотация, подтверждающая, что связанная строка имеет значение, длина которого ограничена минимальным и максимальным значениями.
  3. @Length является Hibernate конкретные аннотации и имеет такое же значение, как @Size

Так как 2 и 3 необходимо проверить длину строки, используя Bean Validation. Я бы выбрал 2. потому что он общий.

+0

Я не использую файлы hbm-mapping, поэтому 1 не подходит для меня, не так ли? Когда я использую Size over Length, или я даже использую оба? – Chris311

+1

'@ Size' универсален, определяется JPA. '@ Length' доступен только для Hibernate. –

+7

'@ Размер - это __not__ аннотация JPA вообще. Это аннотация API API боба! также было бы лучше сказать, что '@ Column' является аннотацией JPA для использования поставщиком JPA в генерации схемы (только), поскольку это можно использовать всеми поставщиками JPA. –

Смежные вопросы