当前位置: 首页 > 知识库问答 >
问题:

如何通过JPA/Hibernate在现有表上添加约束?

宗政功
2023-03-14

我使用一个Postgreql数据库与JPA/Hibernate.当我向列添加约束时,即“nullable=false”,数据库列不会改变以反映这一点。删除表并重新运行应用程序即可完成此工作。

这是否可以通过JPA/Hibernate机制实现,而无需删除条目或表?比如“尝试更改表,并拒绝在不一致的数据上这样做”?在我的application.properties,我已经设置

hibernate.hbm2ddl.auto=update

任何其他设置似乎都在删除数据和/或表。

一个可行的解决方案是运行ALTERTABLE脚本并相应地添加约束注释,但我并不喜欢这样。

共有1个答案

路思源
2023-03-14

无法向现有表中添加约束。仔细想想——如果表中的数据不满足约束,该怎么办?您将导致整个应用程序崩溃。所以Hibernate甚至不尝试应用潜在的有害操作。

一般来说,使用hibernate管理数据库模式的方法是错误的。自动生成模式适用于学习或MVP目的,但不适用于生产。此外,SQL迁移是一个坏主意,原因有很多。您应该使用一个特殊的工具进行模式管理:liquibase(对我来说更好)或flywaydb

 类似资料:
  • 问题内容: 我在这张桌子上遇到麻烦 我想要一个外键约束,并且可以。然后,我还想向该属性添加一个约束,以便它只能采用值“ a”,“ d”和“ u”。我无法将字段设置为或。 谁能告诉我为什么这段代码在MySQL中不起作用? 问题答案: 正如我在本文中所解释的,从8.0.16版本开始,MySQL添加了对CHECK约束的支持: 以前,仅在使用BEFORE INSERT和BEFORE UPDATE触发器时才

  • 问题内容: 我有一个名为“ Person”的表名,下面是列名 我忘了约束。 现在,我尝试使用以下查询将“ 约束” 添加到名为的现有列中, 我收到语法错误…。 问题答案: 只需使用查询并将其添加到您现有的列定义中即可。例如: 请注意:使用查询时,您需要再次指定 完整的 列定义。例如,如果您的列具有值或列注释,则需要在语句中与数据类型和一起指定它,否则它将丢失。防止此类情况发生的最安全方法是从查询的输

  • 问题内容: 我们如何确保列表中的各个字符串不为null /空白或遵循特定的模式 我也想添加图案 但是我可以不用它。但是我绝对希望有一个约束,它可以检查列表中的任何字符串是否为null或空白。而且Json模式看起来如何 问题答案: 您可以为电子邮件字符串创建一个简单的包装类: 然后在现有对象中标记该字段: 然后,验证器将验证列表中的每个对象。

  • 我只是想知道是否有这样一种方法,我可以将我的MySQL表构建为 但是,只有当hibernate++jpa开始构建具有“”的表时,我才在我的DDL中得到这一点 在我的类中,我有这些注释设置,

  • 问题内容: 我有一个代表网站的Class和一个Class 。A 可以有多个。 我想允许所有站点上都存在相同的用户名,但每个站点上都只有一个。 我怎样才能做到这一点? 问题答案: 让用户拥有一个站点参考: 现在将约束添加到用户: 您还必须更改站点映射:

  • 问题内容: 我试图在JPA映射的实体上引入多键约束: 基本上,(产品,序列)对应该是唯一的,但是我只找到一种说序列应该是唯一的方法。这显然不是一个好主意,因为不同的产品可能具有相同的序列号。 有没有办法通过JPA生成此约束,还是我被迫手动将其创建到DB? 问题答案: 您可以使用实体类中的注释来声明唯一约束,即 请注意,这并不是在数据库中神奇地创建唯一约束,您仍然需要DDL才能创建它。但是似乎您正在