一尘不染

Hibernate不尊重MySQL auto_increment主键字段

hibernate

我正在尝试学习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工程项目。)


阅读 427

收藏
2020-06-20

共1个答案

一尘不染

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

2020-06-20