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

时间:2016-01-04 09:48:16

标签: java hibernate validation jpa orm

以下三个字段的验证检查有何区别?

@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有关。 第二个是bean验证。 第三个是用于休眠验证。

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

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

1 个答案:

答案 0 :(得分:81)

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

    因此,2.3.都应使用Bean Validation验证String长度。我选择2.因为它是通用的。