我正在尝试学习Hibernate的工作方式,并且几乎陷入了无法接受的学习曲线。我看不到如何使Hibernate尊重我的对象的auto_increment策略。而是使用现有ID(从1开始)覆盖数据库中的条目。
我有一个简单的Foo对象,由定义如下的MySQL表支持:
Foo
CREATE TABLE `Foo` ( `fooId` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`fooId`), )
我已经确认使用SQL(insert into Foo values();)手动插入多个Foo对象是正确的。
insert into Foo values();
我的Java类具有使用如下注释来指定的ID:
@Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="fooId") private Integer id;
然后,我执行一些测试代码,这些代码仅实例化Foo对象并将其保存到数据库(使用session.save(obj))。似乎它使用自己的主键序列(从一个开始),并且不查看表的键策略。它会覆盖那里的所有内容。
session.save(obj)
我尝试了一些变化@GeneratedValue(使用所有可能的策略,省略了括号子句)。甚至有人建议GeneratedValue完全放弃。似乎没有任何作用。
@GeneratedValue
GeneratedValue
我要丢东西了吗?我想念什么?hibernate真的难吗?
(如果有人有替代的Java数据库持久性选项,请提出一个建议。我在制作原型,而不是持久的mondo工程项目。)
相信你要GenerationType.IDENTITY。MySql不使用表或序列来生成Id值。
GenerationType.IDENTITY