Diferença entre @Size, @Length e @Column (length = value) ao usar JPA e Hibernate

Qual é a diferença entre a verificação de validação dos três campos a seguir?

@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

}

Eu li que o primeiro tem a ver com coisas DDL. O segundo é para validação de bean. O terceiro é para validação de hibernação.

Isso está correto? O que ainda não entendo é: quando devo usar qual? Quando uma dessas anotações é acionada?

Edit: Pense na seguinte situação: Dado o requisito de desenvolver uma entidade com um campo do tipo string com comprimento 13. Qual dos métodos mencionados acima você escolheria? Ou melhor ainda: quais perguntas você precisa se perguntar para descobrir qual delas atende aos seus objetivos?

questionAnswers(1)

yourAnswerToTheQuestion