Marstary 2015-07-07 02:00 采纳率: 0%
浏览 2860

Hibernate+Spring整合后自动建表问题

我测试了一个项目,初期没有问题,但是当我修改了自动生成的数据信息后发现,重新部署后数据仍然为原来的信息,接着我尝试了修改表名,重新部署后表名也和原来一样。
以下是配置信息:
Hibernate:

    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="jdbc.batch_size">20</property>
    <property name="hbm2ddl.auto">${hibernate.auto}</property>
    <property name="connection.autocommit">true</property>

    <!-- 显示sql语句 -->
    <property name="show_sql">true</property>
    <property name="format_sql">false</property>
    <property name="connection.useUnicode">true</property>
    <property name="connection.characterEncoding">UTF-8</property>

    <!-- 缓存设置 -->
    <property name="cache.provider_configuration_file_resource_path">classpath:hibernate-ehcache.xml</property>
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.SingletonEhCacheRegionFactory</property>
    <property name="hibernate.cache.use_query_cache">false</property>

</session-factory>

spring:
<!-- 数据库连接池c3p0配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="jdbcUrl" value="${db.url}"></property>
    <property name="properties" ref="dataSourceProperties"/>
    <property name="driverClass" value="${db.driver}"></property>
    <property name="maxPoolSize" value="40"></property>
    <property name="minPoolSize" value="10"></property>
    <property name="initialPoolSize" value="10"></property>
    <property name="maxIdleTime" value="60"></property>
    <property name="idleConnectionTestPeriod" value="360" /> 
    <property name="preferredTestQuery" value="select 1" />   
    <property name="acquireIncrement" value="5" />   
    <property name="acquireRetryAttempts" value="50" />   
    <property name="acquireRetryDelay" value="1000" />   
    <property name="breakAfterAcquireFailure" value="true" />   
    <property name="autoCommitOnClose" value="false" />   
    <property name="testConnectionOnCheckout" value="true" />      
    <property name="maxStatements" value="100" /> 
    <property name="maxStatementsPerConnection" value="5" />
</bean>

<!-- session工厂 -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    <property name="annotatedClasses">
     <list>
       <value>com.gdms.model.rbac.Department</value>
       <value>com.gdms.model.rbac.Role</value>
       <value>com.gdms.model.rbac.Permission</value>
       <value>com.gdms.model.rbac.User</value>
     </list>
    </property>
    <!-- xml自动扫描方式配置的hibernate类文件  -->
    <property name="mappingLocations">
        <value>classpath:com/gdms/model/*.hbm.xml</value>
    </property> 
</bean>

我自己做的几次测试

BUG信息:hibernate自动建表信息与配置文件和hbm配置信息不一致。
使用配置文件无法控制hibernate自动建表,而且无法找到hibernate自动建表的表名来源。

测试过程中要十分注意缓存问题

测试1:首先测试数据库连接是否还有用。
测试方法:修改数据库连接信息密码,使密码错误。
测试结果:测试显示配置文件仍然能够使用,并且配置数据库信息

测试2:不使用Hibernate自动建表
测试方法:将hibernate.atuo修改为None
测试结果:即使hibernate.atuo修改为None,仍然进行了自动建表。

目前结论,可以确定目前出现的bug与hibernate.atuo没有关联,因为部队Hibernate.auto设置任何信息,hibernate仍然会完成自动建表。

测试3:查看Init方法是否对建表数据产生影响
测试方法:修改数据
测试结果:修改数据没有用,数据仍然产生为以前数据。

测试4:查看修改信息是否对数据库中数据是否产生影响
测试方法:修改初始化方法的数据
测试结果:没有任务影响

目前结论:可以确定目前的建表与Hibernate没有关系,与项目中的init方法也没有关系,目前推测数据来源:一是存在数据缓存,二是存在某种异常处理手段。

  • 写回答

6条回答

  • 大河行脚 2015-07-07 02:04
    关注

    update
    你这里是否应该用update啊

    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python