我正在尝试了解 Hibernate 的工作原理,但我遇到了几乎无法接受的学习曲线。我看不到如何让 Hibernate 尊重我的对象的 auto_increment 策略。相反,它使用现有 ID 覆盖数据库中的条目,从 1 开始。
我有一个简单的 Foo
对象,由如下定义的 MySQL 表支持:
CREATE TABLE `Foo` (
`fooId` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fooId`),
)
我已经确认使用 SQL 手动插入多个 Foo 对象(insert into Foo values();
)是正确的。
我的 Java 类具有使用如下注释指定的 ID:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;
然后我执行一些简单地实例化 Foo 对象并将它们保存到数据库的测试代码(使用 session.save(obj)
)。好像是用自己的主键序列,从一开始,不看表的键策略。它会覆盖那里的所有内容。
我尝试了 @GeneratedValue
位的变体(使用所有可能的策略,省略括号子句)。甚至有人建议完全放弃 GeneratedValue
。似乎没有任何效果。
我是否遗漏了什么?我错过了什么? Hibernate真的这么难吗?
(如果有人有其他 Java 数据库持久性选项,请推荐一个。我正在制作原型(prototype),而不是持久的 mondo 工程项目。)
最佳答案
我相信你想要GenerationType.IDENTITY
。 MySql 不使用表或序列来生成 Id 值。
关于java - Hibernate 不尊重 MySQL auto_increment 主键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582526/