2016-09-07 29 views
0

我正在使用camel并打开jpa作为持久性提供程序,但我不希望在生成时运行alter语句。 快照的persistence.xml如何停止更改数据库的持久性,JPA

<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的,所以不执行该命令改变。

我搜索了但无法找到任何这样的值。

回答

1

这将是很高兴了解更多关于你在做什么以及为什么你需要使用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”。也就是说,尝试:

或者你可以代替“buildSchema”使用“验证” ......然而,正如上面的文档状态,OpenJPA的将抛出一个异常,如果它发现一个模式/域不匹配,这可能不是你想要的。我建议你阅读上面的文档,并查看可用的选项。

感谢,

希斯·托曼