0

我在 Spring 中设置了几个 .hbm.xml 映射文件,我可以从日志中看出 Spring 看到它们并对其进行处理,但数据库中没有创建表。

豆设置:

 <beans:bean id="dataSourceEmbedded" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName" value="org.h2.Driver" />
    <beans:property name="url" value="jdbc:h2:~/myDbName" />
    <beans:property name="username" value="sa" />
    <beans:property name="password" value="" />
</beans:bean>

<beans:bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
      p:dataSource-ref="dataSourceEmbedded">
    <beans:property name="mappingLocations">
        <beans:list>
            <beans:value>classpath:path/to/schemas/Page.hbm.xml</beans:value>                                    
            <beans:value>classpath:path/to/schemas/Navigation.hbm.xml</beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="hibernateProperties">
        <beans:value>
            hibernate.show_sql=true
            hibernate.dialect=${hibernate.dialect}
            hibernate.hbmToDdlAuto=create
        </beans:value>
    </beans:property>
</beans:bean>        

我知道页面和导航映射文件的路径是正确的 - 如果不是,则会引发错误,并且我可以看到在 tomcat 启动期间映射的字段:

DEBUG: org.hibernate.cfg.Configuration - Processing hbm.xml files
INFO : org.hibernate.cfg.HbmBinder - Mapping class: Page -> pages
DEBUG: org.hibernate.cfg.HbmBinder - Mapped property: Page ID -> pageid
DEBUG: org.hibernate.cfg.HbmBinder - Mapped property: title -> title

同样,在加载 tomcat 时,数据库显然被访问/锁定,所以那里发生了一些事情!但是一旦它被加载并且我尝试查询或检查它,就不存在表了。

问题:为什么没有创建我的表/我做错了什么?

4

2 回答 2

2

您使用的属性是错误的,它应该是 'hibernate.hbm2ddl.auto' 而不是 'hibernate.hbmToDdlAuto'... 但是您也可以设置schemaUpdate.LocalSessionFactoryBean

<beans:bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
      p:dataSource-ref="dataSourceEmbedded">
    <beans:property name="mappingLocations">
        <beans:list>
            <beans:value>classpath:path/to/schemas/Page.hbm.xml</beans:value>                                    
            <beans:value>classpath:path/to/schemas/Navigation.hbm.xml</beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="schemaUpdate" value="true" />
    <beans:property name="hibernateProperties">
        <beans:value>
            hibernate.show_sql=true
            hibernate.dialect=${hibernate.dialect}
        </beans:value>
    </beans:property>
</beans:bean>     

相关答案/信息:休眠 hbm2ddl.auto 可能的值以及它们的作用?

于 2013-09-10T11:46:06.597 回答
1

正确的属性名称是hibernate.hbm2ddl.auto

于 2013-09-10T11:50:26.137 回答