当前位置:  开发笔记 > 编程语言 > 正文

Hibernate不尊重MySQL auto_increment主键字段

如何解决《Hibernate不尊重MySQLauto_increment主键字段》经验,为你挑选了2个好方法。

我正在努力学习Hibernate的工作原理,并且我遇到了几乎无法接受的学习曲线.我看不出如何让Hibernate尊重我的对象的auto_increment策略.相反,它使用现有ID覆盖数据库中的条目,从1开始.

我有一个简单的Foo对象,由如下定义的MySQL表支持:

CREATE TABLE `Foo` (
  `fooId` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`fooId`),
)

我已经确认用SQL(insert into Foo values();)手动插入多个Foo对象是正确的.

我的Java类使用如下注释指定了ID:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;

然后我执行一些测试代码,简单地实例化Foo对象并将它们保存到数据库中(使用session.save(obj)).它似乎使用自己的主键序列,从一开始,并没有查看表的关键策略.它会覆盖那里的一切.

我已尝试过该@GeneratedValue位的变体(使用所有可能的策略,不考虑括号子句).有人甚至建议GeneratedValue完全放弃.似乎没什么用.

我要留下什么了?我错过了什么?Hibernate真的很难吗?

(如果有人有另一种Java数据库持久性选项,请建议一个.我正在制作原型,而不是长期的mondo工程项目.)



1> Clint..:

我相信你想要的GenerationType.IDENTITY.MySql不使用表或序列来生成Id值.


呃,我改变了主意,我会在这里回答.我在一些家伙的网站上使用了一个hibernate.cfg.xml文件,它有这个: create 这使得系统每次都重新创建我的表我跑了我的应用程序.评论它解决了这个问题.

2> Gabe Johnson..:

我在接受的答案下的评论中写了这个,但默认情况下没有显示,所以我会重新发布它作为答案.

我在一些家伙的网站上使用了一个hibernate.cfg.xml文件,它有这个:

create

这使得系统每次运行我的应用程序时都会重新创建我的表.评论它解决了这个问题.

关于创建ID的各种方法的另外两个答案是正确的.我的原始问题的症状似乎与ID生成有关,但实际原因是配置错误.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有