Java 和HSQLDB,更新后如何自动添加列
Java and HSQLDB, how to add column automatically after update
我在 Java Spring 中有一个使用 HSQLDB 数据库的应用程序。
对于进化,我必须向现有 table 添加一列。
所以,我已经完成了我必须做的事情(在实体 class 中添加属性和信息)但是当我在 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, liquibase.
非常感谢您的帮助。
这就是我用 flyway 更新数据库结构所做的所有操作。它可能会帮助某人,总有一天。
将 Flyway 依赖添加到我的 pom.xml : http://flywaydb.org/documentation/api/
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>3.2.1</version>
</dependency>
将 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 将解决问题。
在名为 V2__add_datatype_column.sql
的文件夹 src/main/resources/db/migration 下创建一个脚本
ALTER TABLE PUBLICATION ADD COLUMN datatype varchar(6);
编译,成功。
非常感谢 retroq、Rich 和 Michael Pralow 的回答。
我在 Java Spring 中有一个使用 HSQLDB 数据库的应用程序。
对于进化,我必须向现有 table 添加一列。 所以,我已经完成了我必须做的事情(在实体 class 中添加属性和信息)但是当我在 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, liquibase.
非常感谢您的帮助。 这就是我用 flyway 更新数据库结构所做的所有操作。它可能会帮助某人,总有一天。
将 Flyway 依赖添加到我的 pom.xml : http://flywaydb.org/documentation/api/
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>3.2.1</version> </dependency>
将 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 将解决问题。
在名为 V2__add_datatype_column.sql
的文件夹 src/main/resources/db/migration 下创建一个脚本ALTER TABLE PUBLICATION ADD COLUMN datatype varchar(6);
编译,成功。
非常感谢 retroq、Rich 和 Michael Pralow 的回答。