java - 如何阻止持久性更改数据库、JPA

标签 java jpa apache-camel openjpa

我使用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 文档:

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

因此,您专门告诉 OpenJPA 更新您的数据库架构。如果您不希望 OpenJPA 更新您的架构以匹配您的域模型,您可以删除“buildSchema”。也就是说,尝试:

或者您可以使用“validate”代替“buildSchema”...但是,正如上面的文档所述,如果 OpenJPA 发现架构/域不匹配,这可能不是您想要的,它将抛出异常。我建议您阅读上述文档,并查看可用的选项。

谢谢

希思·托曼

关于java - 如何阻止持久性更改数据库、JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39370017/

相关文章:

hibernate - JPA createQuery 或 @NamedQuery

java - 使用 Camel 进行频繁的 SOAP 调用

java - Camel 简单表达式在运行之间不进行计算

java - 在 Apache Beam 中读取 CSV 文件时跳过 header

java - Android Webview JNI 错误与 loadUrl

hibernate - 扩展表的 JPA 映射 View

java - Apache Camel 传递参数

java - 找到由给定数字整除的两位数字组成的最小数字

java - 如何通过输出进行用户/密码验证

sql - JPA标准API : query property of subclass