如何通过改变数据库,JPA来阻止持久性

时间:2016-09-07 12:30:35

标签: java jpa apache-camel openjpa

我使用camel并打开jpa作为持久性提供程序,但我不希望alter语句在prduction上运行。 persistence.xml的快照

<persistence-unit name="camel-openjpa-oracle-alert" transaction-type="RESOURCE_LOCAL">              
.
.
<provider>
            org.apache.openjpa.persistence.PersistenceProviderImpl
        </provider>   
<properties>
 <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=false)" />
</properties>
.
.    
</persistence-unit>

我们必须为openjpa.jdbc.SynchronizeMappings提供什么值,以便不执行alter命令。

我搜索过但无法找到任何此类值。

1 个答案:

答案 0 :(得分:1)

了解您正在做什么以及为什么需要使用SynchronizeMappings会更好。您使用ForeignKeys = true的事实告诉我您希望OpenJPA读取您的架构并确定您是否定义了任何数据库FK(即OpenJPA知道这些FK,以便它可以正确地命令SQL以遵守父/子FK约束)。这是SynchMappings的完美有效使用。但是,通过使用&#39; buildSchema&#39;,您明确告诉OpenJPA使数据库模式与您现有的映射相匹配&#34; ....此评论从此OpenJPA文档解除:

http://openjpa.apache.org/builds/1.2.3/apache-openjpa/docs/ref_guide_mapping.html#ref_guide_mapping_synch

因此,您明确告诉OpenJPA更新数据库架构。您可以删除&#39; buildSchema&#39;如果您不希望OpenJPA更新您的架构以匹配您的域模型。也就是说,试试:

或者你可以使用&#39;验证&#39;代替&#39; buildSchema&#39; ....但是,正如上述文档所述,如果OpenJPA发现可能不是您想要的架构/域不匹配,则会抛出异常。我建议你阅读上面的文档,并查看可用的选项。

谢谢,

Heath Thomann