Java和HSQLDB,如何在更新后自动添加列

时间:2015-04-02 08:10:37

标签: java spring hsqldb

我在Java Spring中使用HSQLDB数据库有一个应用程序。

对于演变,我必须在现有表中添加一列。 所以,我已经做了我必须做的事情(在实体类中添加信息的属性)但是当我在tomcat中部署我的新应用程序时,数据库没有更新,我无法启动我的应用程序。

是否可以自动添加列?

以下是applicationContext.xml中数据库的配置:

<bean id="myEmf"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSourceDb" />
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="true" />
        </bean>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

当然,如果你使用Hibernate,你可以利用对象模型中的自动生成。 但这种方式对于生产用途并不好。 我建议你使用数据库迁移工具。它为您提供了以特定顺序自动执行sql脚本的方法。 查看flywayliquibase

答案 1 :(得分:1)

非常感谢你的帮助。 这是我用flyway更新数据库结构所做的所有操作。有一天它可能对某人有所帮助。

  1. 将Flyway依赖项添加到我的pom.xml:http://flywaydb.org/documentation/api/

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>3.2.1</version>
    </dependency>
    
  2. 将Flyway配置添加到我的应用程序上下文中:

    <bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
        <property name="baselineOnMigrate" value="true" />
        <property name="dataSource" ref="dataSourceDb"/>
    </bean>
    
    <bean id="persistenceUnitManager" depends-on="flyway"
       class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
       <property name="defaultDataSource" ref="dataSourceDb" />
    </bean>
    
  3. 我添加了属性baselineOnMigrate,因为我有一个错误,并且错误消息说将此属性设置为true将解决问题。

    1. 在名为V2__add_datatype_column.sql的文件src / main / resources / db / migration下创建一个脚本

      ALTER TABLE PUBLICATION ADD COLUMN datatype varchar(6);
      
    2. 构建,它​​有效。

      非常感谢retroq,Rich和Michael Pralow的回答。