Как сделать необязательным / nullable свойство в hibernate-validator?

Я нашел эту реализацию, которая в основном делает то, что я хочу.

@ConstraintComposition(OR) @NotBlank @Null @ReportAsSingleViolation @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Constraint(validatedBy = {}) public @interface NullOrNotBlank { String message() default "{org.hibernate.validator.constraints.NullOrNotBlank.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } 

и я использую его как

 @field:NullOrNotBlank @field:Size(max = 50) var middleName: String? = null, 

Я тоже пробовал

 @field:NullOrNotBlank @field:Size(max = 50) @field:Column(nullable = true) var middleName: String? = null, 

Но эти сложные ограничения делают поле в базе данных (MySQL) не нольбежным. Так что происходит, так это то, что он работает нормально, пока я не сохраню Entity в базе данных.

После того, как я встроил hibernate-validator мои тесты также потерпели неудачу.

Почему столбец с нулевым значением был изменен на столбцы с нулевым значением с помощью hibernate-validator ?

hibernate-validator приведет столбец к столбцу с нулевым значением , если вы указали какие либо ограничения, не связанные с nullable для столбца, например:

 @[ConstraintComposition(OR) NotBlank Null] // ^---- it is a @NotNull constraint @NotNull public @interface NotBlank {...} 

Как решить эту проблему?

ЕСЛИ вы видели мои тесты на github, возможно, вы обнаружили, что я использовал @Length который является ограничивающим с помощью NULL ограничением, тогда hibernate-validator не изменяет исходное определение столбца вообще, например:

 @[ConstraintComposition(OR) Length(min = 1) Null] //it is a nullable constraint ---^