我使用camel和open jpa作为持久提供程序,但我不希望在生产时运行更改语句。 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命令。
我进行了搜索,但找不到任何此类值。
最佳答案
如果能更多地了解您正在做什么以及为什么需要使用 SynchronizeMappings,那就太好了。您使用ForeignKeys=true的事实告诉我您希望OpenJPA读取您的架构并确定您是否定义了任何数据库FK(即,OpenJPA知道这些FK,以便它可以正确排序SQL以遵守父/子FK约束)。这是 SynchMappings 的完全有效的使用。但是,通过使用“buildSchema”,您明确告诉 OpenJPA 让“数据库架构与您现有的映射相匹配”......此评论摘自此 OpenJPA 文档:
因此,您专门告诉 OpenJPA 更新您的数据库架构。如果您不希望 OpenJPA 更新您的架构以匹配您的域模型,您可以删除“buildSchema”。也就是说,尝试:
或者您可以使用“validate”代替“buildSchema”...但是,正如上面的文档所述,如果 OpenJPA 发现架构/域不匹配,这可能不是您想要的,它将抛出异常。我建议您阅读上述文档,并查看可用的选项。
谢谢
希思·托曼
关于java - 如何阻止持久性更改数据库、JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39370017/