2015-11-04 53 views
0

你好傢伙我在使用休眠狀態持久數據到mysql時遇到問題。我使用spring mvc和學習企業應用程序,但在數據庫中存在一些麻煩。在我學習的時候請和我一起裸照。我創建了兩個名爲Persons的實體,並將其組織到mysql數據庫中。該模式稱爲練習Lab2。也使用maven來構建我的項目。我在myProject/src/main/webapp/WEB-INF下創建了webapp文件夾。我想知道我是否正確配置hibernate.cfg.xml。我還創建hibernate.cfg.xmlWEB-INF文件夾下以下是我的代碼: 的hibernate.cfg.xml使用休眠狀態持續到mysql的錯誤

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
     <hibernate-configuration> 
     <session-factory> 
       <property name="connection.url">jdbc:mysql://localhost:3306/Lab2</property> 
       <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> 
       <property name="connection.username">root</property> 
       <property name="connection.password">root</property> 
       <!-- DB schema will be updated if needed --> 
       <property name="hbm2ddl.auto">create</property> 
       <!--dialect--> 
       <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
       <!--will print out sql queries to our console--> 
       <property name="show_sql">true</property> 
       <!--names annotated entity class--> 
       <mapping class="edu.sjsu.cmpe275.lab2.models.Person"></mapping> 
       <mapping class="edu.sjsu.cmpe275.lab2.models.Organization"></mapping> 

     </session-factory> 
</hibernate-configuration> 

從做研究,尋找我曾經在網上有什麼WEB-INF創建文件夾,它存儲web.xml和加載所有我編譯的類和可執行文件在文件夾中。 還包含在WEB-INF是我的web.xml。 web.xml加載所有配置。我將hibernate.cfg.xml文件傳遞給web.xml以及services.xml(業務邏輯文件),以及現在什麼也不做的applicationContext.xml。 下面是我的web.xml代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <display-name>Lab 2</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml, /WEB-INF/services.xml, /WEB-INF/hibernate.cfg.xml</param-value> 

    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

下面是調度-servlet.xml文件。該文件偵聽傳入請求併發送響應。它將請求發送給控制器。 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 


    <context:component-scan base-package="edu.sjsu.cmpe275.lab2.controller" /> 


     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> 
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> 
</beans> 

我的service.xml文件加載了我的PesronDao和OrganizationDao的服務實現。另外我決定在這裏添加我的數據庫配置,因爲我將使用SessionFactory interface。我覺得這是我的錯誤發生,因爲我不能堅持到MySQL。另外當我在Person.java中定義@Table時,我得到一個錯誤,說它是cannot resolve table person。 下面是service.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 


     <bean name="personService" class="edu.sjsu.cmpe275.lab2.service.PersonImpl" autowire="byName"/> 

     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
       <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
       <property name="url" value="jdbc:mysql://localhost:3306/Lab2" /> 
       <property name="username" value="root" /> 
       <property name="password" value="root" /> 
     </bean> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>edu.sjsu.cmpe275.lab2.models.Person</value> 
       <value>edu.sjsu.cmpe275.lab2.models.Organization</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> --> 
     <context:component-scan base-package="edu.sjsu.cmpe275.lab2.service" /> 
</beans> 

下面是applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 
</beans> 

下面是我的錯誤:

Hibernate: select next_val as id_val from hibernate_sequence for update 
03-Nov-2015 18:30:25.837 ERROR [http-nio-8080-exec-5] org.hibernate.id.enhanced.TableStructure$1$1.execute could not read a hi value 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'lab2.hibernate_sequence' 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:408) 
    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:2530) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2030) 
    at org.hibernate.id.enhanced.TableStructure.executeQuery(TableStructure.java:224) 
    at org.hibernate.id.enhanced.TableStructure.access$300(TableStructure.java:46) 
    at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:139) 
    at org.hibernate.id.enhanced.TableStructure$1$1.execute(TableStructure.java:126) 
    at org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:55) 
    at org.hibernate.jdbc.AbstractReturningWork.accept(AbstractReturningWork.java:34) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:56) 
    at org.hibernate.id.enhanced.TableStructure$1.getNextValue(TableStructure.java:125) 
    at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:42) 
    at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:417) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665) 
    at edu.sjsu.cmpe275.lab2.service.PersonImpl.createPerson(PersonImpl.java:48) 
    at edu.sjsu.cmpe275.lab2.controller.Controllers.home(Controllers.java:37) 
    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:483) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    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:217) 
    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:616) 
    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:673) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    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文件以及services.xml文件的方式,因爲我覺得這是錯誤發生的地方。請幫助我發現錯誤,或者糾正我錯在哪裏。謝謝。我知道這是一個很長的文本。

回答

1

問題是表lab2.hibernate_sequence不存在。該表由Hibernate用來保存pid序列。當你在配置中這樣做時,此表由休眠創建。

<property name="hbm2ddl.auto">create</property> 

你的配置看起來很奇怪。您的數據庫連接屬性爲hibernate.cfg.xmlservice.xml。這些屬性彼此不同。所以我認爲Hibernate在啓動時不會在數據庫中創建任何表。