我使用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命令。
我搜索过但无法找到任何此类值。
答案 0 :(得分:1)
了解您正在做什么以及为什么需要使用SynchronizeMappings会更好。您使用ForeignKeys = true的事实告诉我您希望OpenJPA读取您的架构并确定您是否定义了任何数据库FK(即OpenJPA知道这些FK,以便它可以正确地命令SQL以遵守父/子FK约束)。这是SynchMappings的完美有效使用。但是,通过使用&#39; buildSchema&#39;,您明确告诉OpenJPA使数据库模式与您现有的映射相匹配&#34; ....此评论从此OpenJPA文档解除:
因此,您明确告诉OpenJPA更新数据库架构。您可以删除&#39; buildSchema&#39;如果您不希望OpenJPA更新您的架构以匹配您的域模型。也就是说,试试:
或者你可以使用&#39;验证&#39;代替&#39; buildSchema&#39; ....但是,正如上述文档所述,如果OpenJPA发现可能不是您想要的架构/域不匹配,则会抛出异常。我建议你阅读上面的文档,并查看可用的选项。
谢谢,
Heath Thomann