频道栏目
首页 > 资讯 > 其他 > 正文

Hibernate自动生成数据表失败

17-03-06        来源:[db:作者]  
收藏   我要投稿

Hibernate自动生成数据表失败:hibernate作为项目中的持久层,其中比较方便的就是自动生成数据表,但是在配置文件中需要使用方言来进行配置。

在mysql中有三个方言,分别是 org.hibernate.dialect.MySQLDialect、org.hibernate.dialect.MySQLInnoDBDialect和org.hibernate.dialect.MySQLMyISAMDialect,其中InnoDB和ISAMD分别表示mysql中的两种引擎。

通过三种方言的名称可以知道org.hibernate.dialect.MySQLInnoDBDialect和org.hibernate.dialect.MySQLMyISAMDialect继承于org.hibernate.dialect.MySQLDialect。

在进行自动生成数据表的时,如果使用org.hibernate.dialect.MySQLInnoDBDialect方言则会发生以下错误

3089 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table employee (id integer not null, name varchar(255), email varchar(255), hiredate datetime, primary key (id)) type=InnoDB
3089 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 1
3089 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete
Hibernate: select max(id) from employee
3188 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1146, SQLState: 42S02
3188 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Table 'test.employee' doesn't exist
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:131)
	at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:68)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
	at com.ztx.view.TestMain.addEmployee(TestMain.java:77)
	at com.ztx.view.TestMain.main(TestMain.java:16)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.employee' doesn't exist
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.Util.getInstance(Util.java:408)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)
	at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:109)
	... 12 more
但是使用org.hibernate.dialect.MySQLDialect就能够自动生成,MySQLDialect是兼容性方言。MySQLInnoDBDialect支持事务,如果数据库版本是5.5以下,就可以直接用,如果是5.5版本及以上,需要改成MySQL5InnoDBDialect或者用MySQLDialect都可以用。
相关TAG标签
上一篇:JDK提供的Arrays的几个减少重复方法
下一篇:Java生成验证码图片
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站