Diferencia entre @Size, @Length y @Column (longitud = valor) cuando se usa JPA e Hibernate

¿Cuál es la diferencia entre la verificación de validación de los siguientes tres campos?

@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

}

Leí que el primero tiene que ver con cosas DDL. El segundo es para la validación de beans. El tercero es para la validación de hibernación.

¿Es eso correcto? Lo que aún no entiendo es: ¿Cuándo debo usar cuál? ¿Cuándo se activa una de estas anotaciones?

Editar: Piense en la siguiente situación: dado el requisito de desarrollar una entidad con un campo de tipo cadena con longitud 13. ¿Cuál de los métodos mencionados elegiría? O incluso mejor: ¿Qué preguntas tiene que hacerse para averiguar cuál se adapta a sus propósitos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta