使用JPA和Hibernate时@Size,@ Longth和@Column(length = value)之间的区别

以下三个字段的validation检查有什么区别?

@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的东西有关。 第二个是beanvalidation。 第三个是用于hibernatevalidation。

那是对的吗? 我还不明白的是:我什么时候需要使用哪一个? 这些注释中的一个何时触发?

编辑:考虑以下情况:鉴于需要开发一个具有长度为13的字符串类型字段的实体。您会选择上述哪种方法? 甚至更好:你有哪些问题要问自己找出哪一个适合你的目的?

  1. @Column是JPA注释,模式生成工具使用length属性来设置关联的SQL列长度。
  2. @Size是一个Bean Validation批注,用于validation关联的String是否具有长度以最小值和最大值为界的值。
  3. @Length是一个特定于Hibernate的注释,与@Size具有相同的含义

所以2.和3.都应该使用Bean Validationvalidation字符串长度。 我选择2.因为它是通用的。