java - Hibernate 不尊重 MySQL auto_increment 主键字段

标签 java mysql hibernate

我正在尝试了解 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/

相关文章:

java - 无法捕获 ConstraintViolationException

java - Android : OpenGL, TextView

用于在列中查找不同值并获取总和的 MySQL 查询

javascript - 该函数是否应该在服务器上异步运行

php - WordPress 永久链接更改引发 500 内部服务器错误

hibernate - 尝试从 JDBC 元数据解析外键元数据未能找到外键的列映射

java - Spring @Async : null hibernate session on LAZY collection

java - 如何定义方法compareTo()?

java - Hibernate:根据年龄对对象进行排序

Java JsonPath 数组的长度