我想了解Hibernate是如何工作的,而且我正在运行一个几乎不可接受的学习曲线。我看不到如何让Hibernate遵守我的对象的auto_increment策略。相反,它是覆盖项与现有的ID数据库,以1休眠不尊重MySQL的auto_increment主键字段
开始我有一个简单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数据库持久性选项,请建议之一。我提出的原型,而不是持久盟工程项目。)
+1对于“几乎不可接受的学习曲线” – 2011-02-10 00:17:24
同上。 Hibernate并不像EJB2那样流畅,而且这很大程度上与开发人员拒绝支持内容而不是技术原因有关。 – Zds 2011-09-08 09:16:59
当您指定GenerationType.AUTO时,Hibernate 5.x不再使用IDENTITY。相反,它会为下一个id查找hibernate_sequence表。 – Mohsen 2016-01-11 08:28:06