【问题标题】:hibernate not generate auto increment constraint on mysql tablehibernate不在mysql表上生成自动增量约束
【发布时间】:2012-04-01 18:44:25
【问题描述】:

我一直在通过不同的论坛搜索信息,并尝试了不同的解决方案,但我仍然无法纠正我的问题。

我正在使用 hibernate4 注释来映射我的实体。在mysql中使用hibernate创建表时,未检测到自动增量键。

我有以下代码:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private int responseId;

我也试过了:

@Id
@GenericGenerator(name="generator", strategy="increment")
@GeneratedValue(generator="generator")
private int responseId;

使用 hibernate id 会自动分配给一行,但在 mysql 表中它没有 AutoIncrement 约束。我必须手动将字段标记为 AI。当我手动插入记录以进行测试或对表使用 jdbc 语句时,这会出现问题。请让我知道我在阻止休眠 id 分配 AutoIncrement Contraint 的配置中缺少什么。

【问题讨论】:

  • 如何让注释创建表格?我们通常采取相反的方式
  • 我们创建类和关系,然后通过将休眠属性 hibernate.hbm2ddl.auto 设置为“更新”生成表。

标签: mysql hibernate auto-increment hibernate-annotations


【解决方案1】:

使用IDENTITY生成器,并使用@ColumncolumnDefinition属性指定列的类型:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(columnDefinition = "MEDIUMINT NOT NULL AUTO_INCREMENT")
private int responseId;

【讨论】:

  • 不要那样做!如果任何其他实体引用了您的响应实体(在 db 表中,而不仅仅是模型中的反向引用),那么外键字段也将自动递增!
  • 我觉得不太好.. 见stackoverflow.com/questions/4102449/…
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2023-02-05
  • 2018-06-12
  • 2016-08-14
相关资源
最近更新 更多