今天遇到一个问题,在运行项目的时候数据库中突然出现一个
hibernate_sequence
的表,这个表并不是我建的,于是把它删了。结果项目再运行就报错了,
could not read a hi value - you need to populate the table: hibernate_sequen..
于是又默默的重新把表加回去了..这次是可以运行了,但是却不能向数据库表插入数据,查询更新却可以。不科学啊,以前都不会出现这个问题。没办法只能百度一下了,后来重新生成数据库实体类(这时候myeclipse10注册码又没用了,又各种想办法破解)结果并没有什么卵用。。。。后来又百度了一下关键词:Table not found: hibernate_sequence 找到一个页面 结果尼玛全是英文的,但是没办法貌似遇到像我类似问题的,中文都搜不到(也许是我搜索技巧不到位),只能硬着头皮看,结果看到
could not read a hi value - you need to populate the table: hibernate_sequen..
于是又默默的重新把表加回去了..这次是可以运行了,但是却不能向数据库表插入数据,查询更新却可以。不科学啊,以前都不会出现这个问题。没办法只能百度一下了,后来重新生成数据库实体类(这时候myeclipse10注册码又没用了,又各种想办法破解)结果并没有什么卵用。。。。后来又百度了一下关键词:Table not found: hibernate_sequence 找到一个页面 结果尼玛全是英文的,但是没办法貌似遇到像我类似问题的,中文都搜不到(也许是我搜索技巧不到位),只能硬着头皮看,结果看到
大致意思就是把数据库实体类的注解@GeneratedValue改成@GeneratedValue(strategy = GenerationType.IDENTITY) 没办法试一试吧,诶结果还真的可以,虽然现在还不知道为什么。。。
更新------
@GeneratedValue(strategy = GenerationType.IDENTITY)的意思是把Hibernate提供的主键生成策略设置为identity (即自增)identity
a)根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。
b)特点: 与底层数据库有关,要求数据库支持Identity,如MySQl中是auto_increment, SQL Server 中是Identity。支持的数据库有MySql、SQL Server、DB2、Sybase和HypersonicSQL。
c)好处:在建表的时候指定了id为自动增长,实际开发中就不需要自己定义插入数据库的主键值,系统会自动顺序递增一个值 。Identity无需Hibernate和用户的干涉,使用较为方便,但由于依赖于数据库,所以不便于在不同的数据库之间移植程序。
-----转载自
Hibernate主键生成策略总结