hibernate希望我构建表结构

时间:2014-05-21 20:45:43

标签: hibernate spring-mvc

我正在开发一个spring-mvc项目,试图让它运行起来。我已经添加了一个到mysql数据库的连接,我得到了下面列出的堆栈跟踪

它要求我构建数据库的表和列,但我认为hibernate将动态创建表和列。我需要手动重建数据库吗?如果是这样,除了使用域对象之外,还有更简单的方法来确定数据库结构吗?

C:\Tomcat\apache-tomcat-7.0.53\bin\catalina.bat run
[2014-05-21 03:37:33,775] Artifact peerreview:war: Server is not connected. Deploy is not available.
Using CATALINA_BASE:   "C:\Users\per245\.IntelliJIdea12\system\tomcat\Unnamed_peerreview_3"
Using CATALINA_HOME:   "C:\Tomcat\apache-tomcat-7.0.53"
Using CATALINA_TMPDIR: "C:\Tomcat\apache-tomcat-7.0.53\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.7.0_11"
Using CLASSPATH:       "C:\Tomcat\apache-tomcat-7.0.53\bin\bootstrap.jar;C:\Tomcat\apache-tomcat-7.0.53\bin\tomcat-juli.jar"
Connected to the target VM, address: '127.0.0.1:58998', transport: 'socket'
May 21, 2014 3:37:34 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_11\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 12.1.2\bin\..\.\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Services\IPT\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\12.0\DLLShared\;C:\Program Files (x86)\Roxio\OEM\AudioCore\;C:\Program Files (x86)\PuTTY;C:\grails\grails-2.2.0\bin;%GROOVY_HOME%\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files\Java\jdk1.7.0_11\bin;C:\Program Files\TortoiseHg\;c:\program files\java\jdk1.7.0_11\jre\bin;.
May 21, 2014 3:37:34 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 21, 2014 3:37:34 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
May 21, 2014 3:37:34 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 400 ms
May 21, 2014 3:37:34 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
May 21, 2014 3:37:34 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.53
May 21, 2014 3:37:34 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
May 21, 2014 3:37:34 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
May 21, 2014 3:37:34 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 32 ms
Connected to server
[2014-05-21 03:37:34,831] Artifact peerreview:war: Artifact is being deployed, please wait...
15:37:42.099 [RMI TCP Connection(3)-127.0.0.1] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DivisionDAO' defined in ServletContext resource [/WEB-INF/spring/applicationContext-business.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext-data.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing column: id in test_dev.division
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1350) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1111) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:459) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) ~[spring-context-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381) ~[spring-web-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) ~[spring-web-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.0.RC1.jar:3.1.0.RC1]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) [catalina.jar:7.0.53]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) [catalina.jar:7.0.53]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.53]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) [catalina.jar:7.0.53]
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) [catalina.jar:7.0.53]
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) [catalina.jar:7.0.53]
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1740) [catalina.jar:7.0.53]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_11]
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) [tomcat-coyote.jar:7.0.53]
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) [na:1.7.0_11]
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:791) [na:1.7.0_11]
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618) [catalina.jar:7.0.53]
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565) [catalina.jar:7.0.53]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_11]
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) [tomcat-coyote.jar:7.0.53]
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) [na:1.7.0_11]
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:791) [na:1.7.0_11]
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1486) [na:1.7.0_11]
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:96) [na:1.7.0_11]
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1327) [na:1.7.0_11]
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1419) [na:1.7.0_11]
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:847) [na:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_11]
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) [na:1.7.0_11]
    at sun.rmi.transport.Transport$1.run(Transport.java:177) [na:1.7.0_11]
    at sun.rmi.transport.Transport$1.run(Transport.java:174) [na:1.7.0_11]
    at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_11]
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) [na:1.7.0_11]
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) [na:1.7.0_11]
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) [na:1.7.0_11]
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) [na:1.7.0_11]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_11]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_11]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_11]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext-data.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing column: id in test_dev.division
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1445) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:459) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    ... 58 common frames omitted
Caused by: org.hibernate.HibernateException: Missing column: id in test_dev.division
    at org.hibernate.mapping.Table.validateColumns(Table.java:276) ~[hibernate-core-3.6.5.Final.jar:3.6.5.Final]
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1343) ~[hibernate-core-3.6.5.Final.jar:3.6.5.Final]
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139) ~[hibernate-core-3.6.5.Final.jar:3.6.5.Final]
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:378) ~[hibernate-core-3.6.5.Final.jar:3.6.5.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872) ~[hibernate-core-3.6.5.Final.jar:3.6.5.Final]
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:822) ~[spring-hibernate-1.2.9.jar:1.2.9]
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:748) ~[spring-hibernate-1.2.9.jar:1.2.9]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1504) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1442) ~[spring-beans-3.1.0.RC1.jar:3.1.0.RC1]
    ... 65 common frames omitted
May 21, 2014 3:37:42 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
May 21, 2014 3:37:42 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [] startup failed due to previous errors
May 21, 2014 3:37:42 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
[2014-05-21 03:37:42,129] Artifact peerreview:war: Error during artifact deployment. See server log for details.
May 21, 2014 3:37:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Tomcat\apache-tomcat-7.0.53\webapps\manager

1 个答案:

答案 0 :(得分:2)

为了让hibernate执行DDL语句,您需要正确配置hibernate.hbm2ddl.auto属性。可能的值为:validate | update | create | create-drop

我建议您从update值开始,通过更改模型来更新数据库。

此属性可以在不同的位置配置,具体取决于项目的构建方式。您可以在persistence.xmlentityManagerFactory配置中找到它。

persistence.xml示例:

<persistence>
   <persistence-unit name="myapp">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
      </properties>
   </persistence-unit>
</persistence> 

entityManagerFactory xml配置示例:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="persistenceUnit"/>
    ....
    <property name="jpaProperties">
        <props>
            ....
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            ....

希望这有帮助!