使用 JPA 和休眠时@Size、@Length和@Column(长度 = 值)之间的差异

2022-08-31 15:21:24

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

@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
  1. @Column是 JPA 注释,架构生成工具使用该属性来设置关联的 SQL 列长度。length
  2. @Size是一个 Bean 验证批注,用于验证关联的 String 是否具有长度受最小值和最大值限制的值。
  3. @Length是特定于 Hibernate 的注释,其含义与@Size

因此,两者都应使用Bean验证来验证长度。我会选择,因为它是通用的。2.3.String2.


答案 2

推荐