What does the length attribute do when set on the @Column JPA annontation?

后端 未结 3 1153
臣服心动
臣服心动 2020-12-04 15:32

What exactly does setting the length on a column do in JPA?

@Column(name = \"middle_name\", nullable = false, length = 32)
public String getMiddleName() {
           


        
3条回答
  •  有刺的猬
    2020-12-04 15:48

    Does length do any sort of check or truncation when persistence happens, or it solely used for schema creation?

    The length attribute of the Column annotation is used to specify:

    The column length. (Applies only if a string-valued column is used.)

    And is only used in the generated DDL. In your example, the resulting column would be generated as a VARCHAR(32) and trying to insert a longer string would result in an SQL error.


    For validation, you could add a @Size(max=32) constraint from the Bean Validation API (JSR 303). I provided a sample with a runnable test here.

    Providing both Size and length may seem redundant but according to the Appendix D. of the Bean Validation spec, generating Bean Validation-aware DDL is not mandatory for Persistence Providers. So use length for the DDL, @Size for validation.

    In case you're interested, just put a Bean Validation implementation on the classpath with JPA 2.0. With JPA 1.0, refer to this previous answer.

提交回复
热议问题