1. 程式人生 > >Hibernate自動創表bug問題解決

Hibernate自動創表bug問題解決

在專案的hibernate.cfg.xml中,我配置好xml後讓hibernate自動在mysql建表

結果後臺報以下bug:

WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
at StudentTest.main(StudentTest.java:16)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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=MyISAM' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
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:2545)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:839)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:739)
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
... 13 more

五月 25, 2017 10:38:54 上午 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
INFO: HHH000476: Executing import script 'org.hiber[email protected]9635fa'
五月 25, 2017 10:38:54 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1146, SQLState: 42S02
五月 25, 2017 10:38:54 上午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Table 'hibernate.student' doesn't exist
五月 25, 2017 10:38:54 上午 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
五月 25, 2017 10:38:54 上午 org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not execute statement]
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1441)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:491)
at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3201)
at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2411)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:467)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:146)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:220)
at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:68)
at StudentTest.main(StudentTest.java:20)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3003)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3503)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:89)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:589)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1435)
... 9 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate.student' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
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.executeUpdateInternal(PreparedStatement.java:2073)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:205)
... 18 more

然後我去資料庫中查看錶也沒有建立成功。通過後臺打印出的幾條sql語句進行分析:

Hibernate: drop table if exists Student

Hibernate: create table Student (id integer not null, name varchar(255), age integer, primary key (id)) type=MyISAM

Hibernate: insert into Student (name, age, id) values (?, ?, ?)

我起初猜測可能是第二句中使用的MyISAMY引擎問題,我的本地資料庫可能配置的是InnoDB。上網一查,發現並不是該問題,是因為MySQL自5.0之後就改type=MyISAM為

engine=MyISAM。但是我並不是手動在資料庫建表,是利用hibernate為我自動建表。一種直觀的方法是去原始碼中找到並修改,然後再配置好放進專案裡。其實這種比較麻煩,,根據網上的資料,採用了第二種方式,在hibernate.cfg.xml中配置 SQL dialect方言。支援mysql高版本的建表。將

修改為

就大功告成了。

相關推薦

Hibernate自動bug問題解決

在專案的hibernate.cfg.xml中,我配置好xml後讓hibernate自動在mysql建表 結果後臺報以下bug: WARN: GenerationTarget encountered exception accepting command : Error executing DDL via J

hibernate 使用mysql6.0 無法自動解決辦法

一句話,用的是mysql 的msi的安裝版 64 bit   大約 40來M 反正就是用盡了各種辦法,包括重啟myeclipse, 重新部署。 重啟電腦。 就是不行。 還是用了 mysql的5.7 大約200多M 安裝包,終於將問題解決。

在hibernate5中,關於讓hibernate自動建表報錯的問題。

dia per div error tin 創建表 之前 dial dialect 問題描述:在讓hibernate創建自動建表時報了一下錯誤: Error executing DDL via JDBC Statement 問題解決:在hibernate.cfg.xml

Hibernate 自動生產

chan hbm2ddl export factory iss orm sch per setname hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。

出現 Unable to instantiate default tuplizer,hibernate自動失敗,原因是在實體類中聲明瞭成員變數describe,而describe是mysql關鍵字

歡迎使用Markdown編輯器寫部落格 本Markdown編輯器使用StackEdit修改而來,用它寫部落格,將會帶來全新的體驗哦: Markdown和擴充套件Markdown簡潔的語法 程式碼塊高亮 圖片連結和圖片上傳 LaTex數學公式 UML序列圖和

hibernate自動 屬性填update 會報錯

自動建表 屬性填update 會報錯的解決方法 hibernate入門學習時,JUnit單元測試時,報錯 顯示以下錯誤: java.lang.ClassCastException: java.util.Collections$EmptyIte

mpvue scroll-view自動回彈bug解決方案

表現 設定了scroll-top的scroll-view元件,在元件所在vue例項data發生改變時會自動回彈到最上方 解決方案 開啟 node_modules/mpvue/index.js, 在任意位置新增以下兩個方法 function cal

Hibernate自動(使用DDL語句)

Gd上次和大家談到使用DDL語句實現自動建表失敗的問題,過了幾天再回頭看果然思路就變得清晰許多,原來是xxx.hbm.xml檔案的配置上出了問題,因為上次沒有用Junit進行測試,所以沒有看明白問題的描述,這裡不得不說一句,Junit真是個好東西,emmmmmm。Junit測

使用SSH Hibernate自動建立的問題:Could not parse mapping document from input stream

在我們開始學習Hibernate的時候,我們找到Hibernate可以幫助我們自動建立資料庫表,但前提是我們必須配置這個屬性:<property name="hbm2ddl.auto">u

Springboot 之 Hibernate自動(Mysql)

本文章來自【知識林】 引入Maven依賴包 <dependency> <groupId>org.springframework.boot</groupI

hibernate自動到資料庫及spring下自動到資料庫

Hibernate支援自動建表,在開發階段很方便,可以保證hbm與資料庫表結構的自動同步。 如何使用呢?很簡單,只要在hibernate.cfg.xml里加上如下程式碼 Xml程式碼<prope

hibernate自動設定欄位型別為資料庫中為timestamp型別

1:專案需要,欄位應該設計為timestamp型別,但自動建表後總是被設定為datetime(當時用的資料庫為sqlserver) Google後,在配置檔案(Xxx.hbm.xml)中column新增 sql-type="timestamp" default="CUR

Hibernate自動建立

Hibernate支援自動建表,在開發階段很方便,可以保證hbm與資料庫表結構的自動同步。 一、通過Hibernate的ShemaExport來建立 1)實體類 package com.xiaomo.vo; public class User {private in

ssh整合思想 Spring與Hibernate的整合 項目在服務器啟動則自動建數據庫

dtd 啟動 mysql5 建立 color 思想 bean .hbm.xml lte Spring整合Hibernate Spring的Web項目中,web.xml文件會自動加載,以出現歡迎首頁。也可以在這個文件中對Spring的配置文件進行監聽,自啟動配置文件, 以及之

使用hibernate自動建立Mysql失敗原因及解決方法

原因: hibernate裡的dialect和Mysql的版本不匹配,SQL語句裡的type=“****”使用在MySQL5.0之前,5.0之後就要是使用engine=“****”。 解決: 修改hibernate.cfg.xml檔案 MySql5.0之前的配置 <property

Hiberntate不能自動的問題:hibernate.(*)

寫代碼 dial ddl ber pro nta auto OS div 今天寫代碼的時候發現啟動服務器之後不能自動建表了?wtf什麽鬼?最後發現了這個問題: hbm2ddl.auto前的hibernate.省略之後出的問題,可能是bug之後的版本應該會修復 <pro

解決Eclipse中新建的Maven項目不自動建web.xml文件

AR prop IT watermark fonts lan ron mar 創建 1. 通過J2EE tools 2.項目右鍵-properties-project facets-勾選dynamic web moudle 解決Eclipse中新創建的Mav

hibernate不能自動:MySQLSyntaxErrorException: Table '' doesn't exist

mysql mysql5 nat nta exist ble property cep exception 修改前: <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect<

hibernate通過pojo自動操作

1. 多對一 如球員和球隊的關係:多個球員在同一個球隊中。 1.1 類圖 TeamPojo:屬性 + set/get public class TeamPojo{ private Integer teamId; private String teamName; private String team

hibernate關閉自動

表結構和資料總是在程式執行的時候無端的修改,折騰了好長時間,查了很長時間hibernate的資料庫對映檔案和介面程式,始終沒有發現有什麼錯誤,到最後才發現了它!            <prop