You need to distinguish validation api and java persistence api (jpa) (and vendor specific persistence api). Hibernate take into account JPA configuration (and hibernate persistence api) and when you do not provide such configuration then Convention Over Configuration
principle is involved to this process. It is why you get varchar(255)
for
@Size(max = 50)
private String shortTitle;
it equals to (i omitted other default values)
@Size(max = 50)
@Column(length = 255, nullable = true)
private String shortTitle;
Validation api is involved for validation purposes. To check if the fields properly filled. There can be exist the different validation rules for the same field.
Updated
I mean this http://beanvalidation.org/1.0/spec/#constraintsdefinitionimplementation-constraintdefinition-groups.
For one group you validate one constraint, for other group you validate other constraint.
For example
@NotNull(groups = DefaultGroup.class)
@Null(groups = SecondGroup.class)
private String shortTitle;
and then
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Title>> constraintViolations = validator.validate(title, DefaultGroup.class);
Set<ConstraintViolation<Title>> secondConstraintViolations = validator.validate(title, SecondGroup.class);