动态禁用hbm2ddl.auto?

时间:2014-06-22 13:40:14

标签: java jpa spring-data-jpa

我有一个包含许多项目的eclipse工作区,一个项目“shareddata”包含我所有的jpa实体,服务,persistence.xml(使用spring-data)等。在我的其他项目中,我在我的maven pom.xml中包含了“shareddata”作为依赖项。

当我启动其他项目之一时,jpa / hibernate验证并更新我的数据库表(hbm2ddl.auto = true)。这很好用。

但要测试我的整个项目需要启动所有包含“shareddata”项目的项目。因此,每个项目都会验证和更新我的数据库表。这需要相当长的时间。

是否只能为一个项目启用“hbm2ddl.auto”?或者是否可以在应用程序启动时动态禁用“hbm2ddl.auto”?

如果可行,我可以启动我的jms服务器项目并进行数据库验证。接下来我启动我的其他项目(tomcat和几个服务器应用程序),他们不会进行数据库验证。

节省了我很多时间: - )

2 个答案:

答案 0 :(得分:1)

我通过系统属性做了这些事情。不幸的是我不知道如何初始化hibernate上下文。我个人通过Spring使用${propName}语法支持系统属性。如果您可以使用此表示法,只需在配置文件中使用它,并在单元测试开始时设置适当的属性。

答案 1 :(得分:0)

花了一点时间才弄明白,但jpa是在我的applicationContext.xml中配置的(或者像root-context.xml这样的变种)。 LocalContainerEntityManagerFactoryBean执行初始化。

Lucky LocalContainerEntityManagerFactoryBean接受似乎覆盖persistence.xml中设置的值的参数。所以我在persistence.xml中将hibernate.hbm2ddl.auto设置为none,并使用以下xml为特定项目启用hibernate.hbm2ddl.auto:

<!-- Add JPA support -->
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

希望这可以帮助有同样问题的人。