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

Chr*_*311 52 java validation orm hibernate jpa

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

@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

}
Run Code Online (Sandbox Code Playgroud)

我读到第一个与DDL的东西有关.第二个是bean验证.第三个是用于休眠验证.

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

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

Vla*_*cea 97

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

因此,无论2.并且3.应该验证String使用Bean验证长度.我选择2.因为它是通用的.

  • `@ Size`是__not__一个JPA注释.它是Bean Validation API注释!也可以更好地说`@ Column`是JPA注释,供JPA提供者在模式生成中使用(仅限),因为它可供所有JPA提供者使用. (14认同)