hbm2ddl.autoupdate為update但未正常生效的問(wèn)題解決

數(shù)據(jù)庫(kù)使用的是Mysql5.5浊洞,原來(lái)使用了hibernate4。
最近同事在更新時(shí)热康,將hibernate4升級(jí)為hibernate5 并加入了c3p0沛申,升級(jí)后發(fā)現(xiàn)連原來(lái)的數(shù)據(jù)庫(kù),運(yùn)行時(shí)有如下報(bào)錯(cuò)姐军,此外,業(yè)務(wù)功能一切都正常尖淘。

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.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
    at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:176)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:65)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:478)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:423)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:711)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:727)
.......
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'aaaa' already exists
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
    at com.mysql.jdbc.Statement.execute(Statement.java:727)
    at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:909)
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
    ... 30 more

修改后的hibernate配置如下,除了新增了c3p0部分的配置外奕锌,其他項(xiàng)與修改前相同


        <!--C3P0配置 -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <property name="c3p0.max_size">20</property>     
        <property name="c3p0.min_size">1</property>
        <property name="c3p0.initialPoolSize">1</property>
        <property name="c3p0.timeout">120</property>
        <property name="c3p0.max_statements">100</property>
        <property name="c3p0.idle_test_period">120</property>     
        <property name="c3p0.acquire_increment">1</property>
        <property name="c3p0.validate">true</property>  
        <property name="c3p0.maxIdleTime">60</property>             
        <property name="c3p0.checkoutTimeout">100</property>        

        <!-- Database connection settings -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/xxx</property>
        <property name="hibernate.connection.username">xxx</property>
        <property name="hibernate.connection.password">xxx</property>  
        <!-- JDBC connection pool (use the built-in) -->
        <property name="hibernate.connection.pool_size">1</property>
        <!-- SQL dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        
        <!-- <property name="dialect">com.cetc7.dao.utils.dialect.SQLiteDialect</property> -->       
        <!-- Disable the second-level cache  -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
        <!-- Echo all executed SQL to stdout -->
        <property name="hibernate.show_sql">false</property>        
        <property name="hibernate.format_sql">true</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>        
        <property name="hibernate.current_session_context_class">thread</property>
...

事實(shí)上hibernate已經(jīng)配置了hbm2ddl.auto為update,不應(yīng)該再去新建表的村生。
順著Error executing DDL via JDBC Statement找了一圈惊暴,發(fā)現(xiàn)都是大家都是因?yàn)榉窖訫ySQL5Dialect寫(xiě)錯(cuò)為MySQLDialect引起的問(wèn)題,然而這里也不存在趁桃。

懷疑要么是hibernate5與hibernate4的可能有些沒(méi)注意到的差異辽话,要么是c3p0部分的配置有誤,嘗試將c3p0去除卫病,問(wèn)題修復(fù)油啤。

對(duì)c3p0的配置項(xiàng)過(guò)了一遍,將checkoutTimeout從100改為3000蟀苛,問(wèn)題修復(fù)益咬。
猜測(cè)同事是沒(méi)注意到單位是毫秒。

        <!--當(dāng)連接池用完時(shí)客戶端調(diào)用getConnection()后等待獲取新連接的時(shí)間帜平,超時(shí)后將拋出SQLException,如設(shè)為0則無(wú)限期等待幽告。單位毫秒。Default: 0 -->    
        <!--<property name="c3p0.checkoutTimeout">100</property>100毫秒太短會(huì)引發(fā)database schema無(wú)法update的錯(cuò)誤--> 
        <property name="c3p0.checkoutTimeout">3000</property>   

將這項(xiàng)配置去除裆甩,問(wèn)題也修復(fù)冗锁,從日志中看到checkoutTimeout默認(rèn)為0。
回頭又看了一遍出錯(cuò)日志嗤栓,發(fā)現(xiàn)出錯(cuò)日志的最前面就有下邊這個(gè)建立連接超時(shí)的WARN冻河,卻被我直接忽略了。

2019-01-11 22:15:08:365 WARN [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService:132] HHH000342: Could not obtain connection to query metadata : An attempt by a client to checkout a Connection has timed out.
2019-01-11 22:15:08:378 INFO [org.hibernate.dialect.Dialect.<init>:156] HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2019-01-11 22:15:08:399 INFO [org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl.makeLobCreatorBuilder:63] HHH000422: Disabling contextual LOB creation as connection was null

嗯,就是系統(tǒng)運(yùn)行時(shí)芋绸,update配置有效耙厚,但由于建立連接時(shí)超時(shí)時(shí)間太短唉俗,連接失敗,未查詢到Table已經(jīng)存在,就新建熄求,然后也失敗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栓辜,一起剝皮案震驚了整個(gè)濱河市卜范,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌行楞,老刑警劉巖攒暇,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異子房,居然都是意外死亡形用,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)证杭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)田度,“玉大人,你說(shuō)我怎么就攤上這事解愤≌蚪龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵送讲,是天一觀的道長(zhǎng)奸笤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)哼鬓,這世上最難降的妖魔是什么监右? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮魄宏,結(jié)果婚禮上秸侣,老公的妹妹穿的比我還像新娘。我一直安慰自己宠互,他們只是感情好味榛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著予跌,像睡著了一般搏色。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上券册,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天频轿,我揣著相機(jī)與錄音垂涯,去河邊找鬼。 笑死航邢,一個(gè)胖子當(dāng)著我的面吹牛耕赘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膳殷,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼操骡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赚窃?” 一聲冷哼從身側(cè)響起册招,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勒极,沒(méi)想到半個(gè)月后是掰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辱匿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年键痛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾七。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡散休,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乐尊,到底是詐尸還是另有隱情,我是刑警寧澤划址,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布扔嵌,位于F島的核電站,受9級(jí)特大地震影響夺颤,放射性物質(zhì)發(fā)生泄漏痢缎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一世澜、第九天 我趴在偏房一處隱蔽的房頂上張望独旷。 院中可真熱鬧,春花似錦寥裂、人聲如沸嵌洼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)麻养。三九已至,卻和暖如春诺舔,著一層夾襖步出監(jiān)牢的瞬間鳖昌,已是汗流浹背备畦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留许昨,地道東北人懂盐。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糕档,于是被迫代替她去往敵國(guó)和親莉恼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • When Au Meets Ai & Music Finds Picture.
    Secant閱讀 674評(píng)論 1 4
  • 入窗冬陽(yáng)暖 物華競(jìng)風(fēng)流 簾外殘雪淚 閑來(lái)少說(shuō)愁
    慕愚堂閱讀 173評(píng)論 0 4
  • 睿達(dá)成長(zhǎng)日記1 現(xiàn)在是小寒節(jié)氣翼岁,一年里最冷的20天呀类垫,早上6點(diǎn)多孩子就要起床了。老公:亮亮7點(diǎn)還差10分了琅坡,該起床...
    5c598577d72a閱讀 100評(píng)論 0 0
  • 文 / 淡水泉 自古思鄉(xiāng)多郁懷悉患,今朝何喜笑顏開(kāi)。 三千里外飛鴻報(bào)榆俺,為有榕城知己來(lái)售躁。 ——淡水泉《贈(zèng)秋水》中華新韻 ...
    淡水泉閱讀 2,031評(píng)論 32 74