Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态禁用hbm2ddl.auto?_Java_Jpa_Spring Data Jpa - Fatal编程技术网

Java 动态禁用hbm2ddl.auto?

Java 动态禁用hbm2ddl.auto?,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我有一个包含许多项目的eclipse工作区,一个项目“shareddata”包含我所有的jpa实体、服务、persistence.xml(使用spring数据)等等。在我的其他项目中,我将“shareddata”作为依赖项包含在我的maven pom.xml中 当我启动另一个项目时,jpa/hibernate会验证并更新我的数据库表(hbm2ddl.auto=true)。这很有效 但是为了测试我的整个项目,需要启动几个项目,这些项目都包括“shareddata”项目。因此,每个项目都会验证和更新

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

当我启动另一个项目时,jpa/hibernate会验证并更新我的数据库表(hbm2ddl.auto=true)。这很有效

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

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

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


节省了我很多时间:-)

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

花了一点时间才弄清楚,但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>

更新

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

干杯,你的回答让我看到了jpa的初始化位置,我在任何地方都使用相同的xml,从来没有费心去看它到底做了什么,因为它总是有效的。最后我发现LocalContainerEntityManagerFactoryBean进行了初始化。我会发布一个详细的答案。