Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在hibernate验证程序中创建可选/可空属性?_Java_Hibernate_Jpa_Kotlin - Fatal编程技术网

Java 如何在hibernate验证程序中创建可选/可空属性?

Java 如何在hibernate验证程序中创建可选/可空属性?,java,hibernate,jpa,kotlin,Java,Hibernate,Jpa,Kotlin,我发现这基本上是我想要的 @ConstraintComposition(OR) @NotBlank @Null @ReportAsSingleViolation @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Constraint(validatedBy = {}) public @interface NullOrNotBlank { String message

我发现这基本上是我想要的

@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)
@field:Column(nullable = true)
var middleName: String? = null,

但这种复合约束使数据库(MySQL)中的字段不可为空。因此,在我将实体保存到数据库之前,它工作正常。

在我嵌入
hibernate验证器之后,我的验证也失败了

为什么hibernate validator将可空列更改为不可空列

如果您在列上声明了任何不可为空的约束,则
hibernate验证器
将使列变为不可为空的列,例如:

@[ConstraintComposition(OR) NotBlank Null]
//                          ^---- it is a @NotNull constraint

@NotNull
public @interface NotBlank {...}
@[ConstraintComposition(OR)  Length(min = 1)  Null]
//it is a nullable constraint ---^
如何解决这个问题

如果您在github上看过my,您可能会发现我使用了一个
@Length
,这是一个可空的约束,那么
hibernate验证器
根本不会更改原始列定义,例如:

@[ConstraintComposition(OR) NotBlank Null]
//                          ^---- it is a @NotNull constraint

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

在我嵌入
hibernate验证器之后
my也失败了

为什么hibernate validator将可空列更改为不可空列

如果您在列上声明了任何不可为空的约束,则
hibernate验证器
将使列变为不可为空的列,例如:

@[ConstraintComposition(OR) NotBlank Null]
//                          ^---- it is a @NotNull constraint

@NotNull
public @interface NotBlank {...}
@[ConstraintComposition(OR)  Length(min = 1)  Null]
//it is a nullable constraint ---^
如何解决这个问题

如果您在github上看过my,您可能会发现我使用了一个
@Length
,这是一个可空的约束,那么
hibernate验证器
根本不会更改原始列定义,例如:

@[ConstraintComposition(OR) NotBlank Null]
//                          ^---- it is a @NotNull constraint

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


生成的
NullOrNotBlank
列是
notnull
,当我插入一个属性为NULL的实体时,它会引发一个错误。我想您应该尝试使用
hbm2ddl.auto
来更新列中的约束。如果列存在,它根本不会更新约束。所以你应该手动更新它。请看这里:现在怎么样?如果没有问题。您应该删除您的问题,因为它是重复的。我正在使用hbm2ddl.auto=create drop在Startup上重新创建表,您确定吗?您是否在列字段上使用了
@Column(nullable=true)
@NullOrNotBlank
仅用于验证,不支持列定义。
NullOrNotBlank
的生成列为
notnull
,当我插入一个具有NULL属性的实体时,它会引发一个错误。我想您应该尝试使用
hbm2ddl.auto
来更新列中的约束。如果列存在,它根本不会更新约束。所以你应该手动更新它。请看这里:现在怎么样?如果没有问题。您应该删除您的问题,因为它是重复的。我正在使用hbm2ddl.auto=create drop在Startup上重新创建表,您确定吗?您是否在列字段上使用了
@Column(nullable=true)
@NullOrNotBlank
仅用于验证,不支持列定义。感谢您的回答!我在实现中所做的是将
@Length
替换为
@Size(min=1)
,以便它可以应用于其他数据类型。我还注意到,我的旧实现忽略了
@NotBlank
约束。因为在我将其更改为
@Size(min=1)
之后,一些断言违规次数的测试失败了。@jasperagrante根本没有。昨晚我发现
hibernate验证器
将更改
DDL
定义。我也已经在我的应用程序上实现了Flyway,因此我可以控制模式和迁移。再次感谢:)谢谢你的回答!我在实现中所做的是将
@Length
替换为
@Size(min=1)
,以便它可以应用于其他数据类型。我还注意到,我的旧实现忽略了
@NotBlank
约束。因为在我将其更改为
@Size(min=1)
之后,一些断言违规次数的测试失败了。@jasperagrante根本没有。昨晚我发现
hibernate验证器
将更改
DDL
定义。我也已经在我的应用程序上实现了Flyway,因此我可以控制模式和迁移。再次感谢:)