2012-03-16 51 views
2

我一直在寻找不同的论坛的问题,并尝试了不同的解决方案,但我仍然无法找到任何正确的答案,我的问题。休眠不会在mysql表上产生自动增量限制

我使用hibernate4注释映射我的实体。一切工作正常,但只有自动增量键没有检测到时使用MySQL中的休眠创建表。

我有以下代码:

@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表它没有自动增加约束。我必须手动将字段标记为AI。当我手动插入记录进行测试或对表使用jdbc语句时,这会变得有问题。 Plz让我知道我在配置中缺少的是防止休眠在相应的列上施加AutoIncrement Contraint。

+0

你如何注解创建表?我们通常采用相反的方式 – kommradHomer 2012-03-18 10:01:57

+0

我们创建类和关系,然后通过将hibernate.hbm2ddl.auto设置为'update'生成表。 – maimoona 2012-07-03 06:38:49

回答

4

使用Identity发电机,并使用@ColumncolumnDefinition属性来指定列的类型:

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

工作!!!!!许多很多谢谢......这只是让我疯狂...... – maimoona 2012-03-16 10:41:04

+1

不要这样做!如果任何其他实体对您的响应实体有引用(在db表中,不仅仅是模型中的反向引用),那么外键字段也将自动增量! – maklemenz 2014-02-20 15:56:22

+0

它对我来说看起来不太好..见http://stackoverflow.com/questions/4102449/how-to-annotate-mysql-autoincrement-field-with-jpa-annotations – BrunoJCM 2015-09-02 19:38:10