簡體   English   中英

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

[英]Java and HSQLDB, how to add column automatically after update

我在使用HSQLDB數據庫的Java Spring中有一個應用程序。

為了進行演變,我必須在現有表中添加一列。 因此,我已經完成了必須做的事情(將實體類中的屬性與信息一起添加),但是當我在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>

謝謝您的幫助。

當然,如果使用Hibernate,則可以利用對象模型的自動生成功能。 但是這種方式不適用於生產用途。 我建議您使用數據庫遷移工具。 它為您提供了按一定順序自動執行sql腳本的方法。 看看飛行道液基

非常感謝您的幫助。 這是我使用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> 

我添加了屬性baselineOnMigrate,因為發生了錯誤,並且錯誤消息指出將此屬性設置為true將解決此問題。

  1. 在文件夾src / main / resources / db / migration下創建一個名為V2__add_datatype_column.sql的腳本

     ALTER TABLE PUBLICATION ADD COLUMN datatype varchar(6); 
  2. 構建,它可以工作。

    非常感謝Retroq,Rich和Michael Pralow的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM