【问题标题】:Annotations size smallest than real size in database注释大小小于数据库中的实际大小
【发布时间】:2019-12-05 08:29:33
【问题描述】:

我很好奇在数据库中定义实体列大小小于 tha 的含义是什么。那有什么危险吗?没有自动生成方案。我正在使用 javax.validation.constraints.Size。

【问题讨论】:

  • 你为什么要做那样的事情?!?
  • 代码中的约束应始终与数据库中的实际约束相匹配。

标签: java sql hibernate persistence


【解决方案1】:

这意味着验证框架将检查数据是否符合给定的大小。现在假设您在数据库中直接插入了大于大小值的数据,在验证数据库中的实体时会出错,因为它对于您的实体字段来说太大了。请注意,我在这里指的是@Length 注释。这个注解是一个 Hibernate 特定的注解。 @Size 等价于 @Length,但它并不特定于 Hibernate,而是在 JSR 380 specification 中定义。

在这两种情况下,您都应该小心。为了强制执行约束注释,您依赖于验证实现,例如Hibernate Validator。因此,您将需要注册一个验证器并在您的 bean/实体上执行验证。结果,验证器将在您的 bean/实体上返回 constraintViolations,您可以处理或忽略它。

现在,如果我们谈论的是注解Column长度,它描述的是数据库的物理属性。此定义不用于强制验证,而是用于根据您的实体生成数据库架构。

您可以在以下 Baeldung bean article 中找到有关 bean 验证的更多详细信息。

另外,还有一篇很好的文章介绍@Size/@Length/@Column(length=...)的区别

在所有情况下,都不要这样做……您实际上是在定义应用程序中不统一的约束。验证框架用于强制对您的 bean 执行某些属性。如果现在您的实体和数据库列之间有不同的属性,您将添加不一致。

最后,如果不进行验证,显然不会引发错误。

【讨论】:

  • 能否请提供您的注释行?
  • 我只能给你看一个注释的例子。希望它会有所帮助。 @Size(max = 10) @Column(name = "test") 私有字符串测试;
  • 我根据您提供的其他信息调整了我的答案
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2014-01-19
  • 1970-01-01
相关资源
最近更新 更多