2015-07-10 57 views
2

我目前正在使用休眠構建一個小型的基於Web的工具。我使用Tomcat v7.0服務器在eclipse中運行該站點。我的數據庫在Linux上使用MySQL版本5.6。我如何擺脫「MySQLSyntaxErrorException」

現在,每次我運行程序,開始我的index.xhtml在服務器上,我得到的是看起來像這樣離譜的錯誤消息:

ERROR: HHH000300: Could not complete schema validation 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table 'system_sequences' in information_schema 
    at sun.reflect.GeneratedConstructorAccessor48.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) 
    at com.mysql.jdbc.Util.getInstance(Util.java:360) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484) 
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446) 
    at org.hibernate.tool.hbm2ddl.DatabaseMetadata.initSequences(DatabaseMetadata.java:178) 
    at org.hibernate.tool.hbm2ddl.DatabaseMetadata.<init>(DatabaseMetadata.java:92) 
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:168) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:525) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930) 
    at com.ubs.tbt.database.KurseDAO.getModule(KurseDAO.java:139) 
    at com.ubs.tbt.database.Klasse.module(Klasse.java:59) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:165) 
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:159) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    at com.sun.faces.facelets.component.UIRepeat.getValue(UIRepeat.java:274) 
    at com.sun.faces.facelets.component.UIRepeat.getDataModel(UIRepeat.java:250) 
    at com.sun.faces.facelets.component.UIRepeat.setIndex(UIRepeat.java:444) 
    at com.sun.faces.facelets.component.UIRepeat.doVisitChildren(UIRepeat.java:679) 
    at com.sun.faces.facelets.component.UIRepeat.visitTree(UIRepeat.java:637) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:371) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 
    at org.primefaces.component.api.UITabPanel.visitTree(UITabPanel.java:920) 
    at com.sun.faces.facelets.component.UIRepeat.visitTree(UIRepeat.java:643) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 
    at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.saveView(FaceletPartialStateManagementStrategy.java:472) 
    at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:89) 
    at javax.faces.application.StateManager.getViewState(StateManager.java:593) 
    at com.sun.faces.context.PartialViewContextImpl.renderState(PartialViewContextImpl.java:454) 
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:322) 
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) 
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:417) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

我hibernate.cfg

<?xml version='1.0'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://192.168.1.34:3306/BeurteilungsDB</property> 
     <property name="connection.username">admin</property> 
     <property name="connection.password">po2015</property> 

     <!-- Zusaetzliche Hibernate-Properties --> 
     <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> 
     <property name="hibernate.format_sql">true</property> 
     <property name="hibernate.current_session_context_class">thread</property> 

     <property name="hibernate.hbm2ddl.auto">validate</property> 

     <!-- Definition der gemappten Klassen --> 

    <!-- <mapping class="ch.fg.bibliothek.Verlag" />--> 
     <mapping class="com.ubs.tbt.database.Eventbewertung" /> 
     <mapping class="com.ubs.tbt.database.Modulbewertung" /> 
     <mapping class="com.ubs.tbt.database.Teilnehmer" /> 
     <mapping class="com.ubs.tbt.database.Klasse" /> 
     <mapping class="com.ubs.tbt.database.Firma" /> 
     <mapping class="com.ubs.tbt.database.Kursleiter" /> 
     <mapping class="com.ubs.tbt.database.Module" /> 
     <mapping class="com.ubs.tbt.database.Kurse" /> 

    </session-factory> 


</hibernate-configuration> 

程序本身正常運行並按照它應有的方式工作,但是當控制檯中每隔一行打印一條消息時,我很難驗證其餘的控制檯輸出。

值得一提的是,我在添加關鍵字validate<property name="hibernate.hbm2ddl.auto">validate</property>後開始接收此消息。

這個表應該是什麼,最重要的是,我該如何擺脫這個信息?

+2

嘗試將'org.hibernate.dialect.HSQLDialect'更改爲'org.hibernate。dialect.MySQLDialect'。這可能有幫助。 – dly

回答

2

首先您需要了解hibernate映射到ddl,hbm2ddl.auto的設置。

從文檔hibernate.hbm2ddl.auto

創建SessionFactory的時候會自動驗證或出口模式的DDL到數據庫。使用create-drop,當SessionFactory顯式關閉時,數據庫模式將被刪除。 例如驗證|更新|創建|創建拖放

validate:驗證模式,不更改數據庫。

update:更新模式。

​​創建模式,破壞以前的數據。

create-drop:在會話結束時刪除架構。

您的配置無法驗證架構,因爲它無法找到information_schemasystem_sequences。我認爲這是因爲你選擇的方言。

嘗試org.hibernate.dialect.MySQLDialect

看文件的網址,以取代org.hibernate.dialect.HSQLDialect選擇正確的話,並確認該配置的其餘部分。

MySQL的休眠的方言:

MySQL    org.hibernate.dialect.MySQLDialect 
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect 
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect 

information_schema是MySQL的自己的信息數據庫。它包含有關其數據庫服務器中維護的所有其他(您自己的)數據庫的所有信息。

+0

感謝您提供快速回答和所有信息。我嘗試了你告訴我的,並且有點打破了我的程序。我將不得不改變我的整個數據庫以符合現在的要求。有沒有辦法解決這個問題? – Reteras

+0

你的數據庫是如何創建的?你是否使用hibernate.hbm2ddl.auto第一次創建?檢查你的mysql中有什麼,並確認它沒問題。否則,您可能需要刪除它並使用'create'標誌運行。之後你可能會將其更改爲「驗證」。記住這個標誌應該在生產環境中仔細處理。 – MrSimpleMind