我正在尝试创建一个应用程序引导程序,如果它们存在,将删除应用程序中的所有表,然后使用新数据对它们进行初始化。
我创建了一个加载数据源上下文的Spring Context - 但是我不知道如何覆盖数据源的初始化,以便可以根据数据源的加载方式自定义行为。所以..使用Hibernate作为我的JPA实现..
如果从应用程序加载数据源 - 那么我希望更新架构:
<persistence-unit name="myDB" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
如果数据源是从引导程序加载的 - 那么我需要以某种方式重载此行为,以便在加载新数据之前始终从头开始创建数据库:
<persistence-unit name="myDB" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
我采用的方法不起作用,因为我使用'update'设置加载数据源,然后在尝试加载新数据之前删除表(如果存在)。但是 - 用于写入数据的表格不再存在!
提前致谢
西蒙
答案 0 :(得分:0)
您可以从Spring配置而不是persistance.xml
传递JPA属性,并使用可由PlaceholderConfigurer(可能是system-properties =“OVERRIDE”)或Spring配置文件(从3.1开始)或使用Maven过滤配置的占位符:
<util:map id="jpaPropertyMap" key-type="java.lang.String" value-type="java.lang.Object">
<entry key="hibernate.hbm2ddl.auto" value="${database.ddl.mode}" />
</util:map>
<bean id="managementEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource"
p:jpaPropertyMap-ref="jpaPropertyMap" />