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

问题描述

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方法也没有关系,目前推测数据来源:一是存在数据缓存,二是存在某种异常处理手段。

解决方案

update
你这里是否应该用update啊

解决方案二:

你在配置hibernate是不是应该指定更新方式为update

解决方案三:

create,update,drop我尝试过了,现在问题是我修改后,数据库当中会出现两份数据,一份是我修改后的,一份是我修改前的,我现在无法理解修改的数据保存在哪里,我已经尝试清空了tomcat缓存,重新编译了myecplise项目,重启了电脑,都没有用。

解决方案四:

问题解决了,是tomcat-work下面的缓存信息没有删除,只删除了webapps下面的。

解决方案五:

你执行的方法是什么方法,有可能是你想更新的数据变成了insert新增的数据了

解决方案六:

修改成create-or-extend会不会好

时间: 2024-10-27 14:00:50

spring-Hibernate+Spring整合后自动建表问题的相关文章

hibernate自动建表到数据库及spring下自动建表到数据库

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<property name="hbm2ddl.auto">update</property>     update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:

mysql-测试hibernate框架自动建表并保存数据,没报错,但数据只保存了一部分

问题描述 测试hibernate框架自动建表并保存数据,没报错,但数据只保存了一部分 解决方案 因为你去给Product这个对象创建三个实例,pro.pro2.pro3,对吧,然后你不停的给pro去赋值(pro.setName()),最后pro的最后一个值把前两个覆盖掉了,所以只添加了一个棉花糖.正确的方式是要给每个,你把第29行改成pro2.setName():30行pro2.setDir():33行pro3.setName():34行pro3.setDir(),就万事大吉了,祝你成功! 解决

ssh整合-spring hibernate struts2整合出现空指针异常

问题描述 spring hibernate struts2整合出现空指针异常 本人菜鸟大学生一枚,跪求高手指教,不甚感激, 我在spring hibernate整合后测试没有问题,可以实现对数据库的操作,然后我整合struts,同样的在action中调用业务方法,查询数据库所有的时候,出现空指针异常 解决方案 调试下哪的空指针,如果是属性注入失败的话,检查spring的配置文件是否正确. 解决方案二: 没有进入到你的action中的方法里面,用debug调试一下,看看是不是哪里写错了 解决方案三

java web-Hibernate根据注解自动建表,有的表新建出错是什么原因

问题描述 Hibernate根据注解自动建表,有的表新建出错是什么原因 项目是自己的毕业设计,当时是没什么问题,但是时过几个月,现在重新运行,发现有两张表始终无法新建, 那好吧,我自己手动建,但是此时我的hbm2ddl.auto=update,当启动tomcat,update到这张表的时候,tomcat直接卡在这里,然后就提示超时了,不知道是什么原因 Hibernate相关属性配置 dataSource.driverClassName=oracle.jdbc.driver.OracleDrive

hibernate-Hibernate5以后自动建表问题。

问题描述 Hibernate5以后自动建表问题. 求教该怎样写,我写的SchemaExport建议是用了,现在该用什么?

日志服务(原SLS)新功能发布(12)--日志投递ODPS支持自动建表授权

背景 日志服务支持"日志消费","日志索引"和"日志投递"三种消费模式,"日志消费"功能默认支持,支持日志数据上传到服务端3秒内进行实时消费,并且支持保留48小时,"日志索引功能"支持30秒内进行查询,并且在创建时支持保存7天/30天/90天,"日志投递"能够在分钟级别将数据投递至OSS或者MaxCompute(原ODPS). 之前"日志投递"功能创建投递规则至Max

关于hibernate 自动建表问题

问题描述 packagecom.web.cn.entity;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.Table;importorg.apache.lucene

Struts Spring Hibernate (SSH) 整合实例

首选创建web.xml 主要是配置Struts的ActionServlet和Spring的字符过滤器 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="

Spring+Hibernate+Struts2整合所需要的Jar包

struts2.1.6 支持jar包 xwork-2.1.2.jar struts2-core-2.1.6.jar commons-logging-1.0.4.jar freemarker-2.3.13.jar ognl-2.6.11.jar commons-fileupload-1.2.1.jar spring2.5.6支持jar包 spring.jar cglib-nodep-2.1_3.jar dom4j-1.6.1.jar log4j-1.2.15.jar commons-logging