JPA和toplink create-table如果它们尚不存在?

看起来jpa是让我提出很多问题的东西。 添加了这个
<property name="toplink.ddl-generation" value="create-tables"/>
我的JPA应用程序总是在运行时创建表,这会导致表已存在时出现异常。我希望JPA检查表是否已经存在,如果没有创建它们,但是我找不到上面的属性的值,这样做。 所以如果我把它关闭,有没有办法在某个时候手动告诉JPA创建所有表? 这里更新是我得到的例外
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tags' already exists
Error Code: 1050
Call: CREATE TABLE tags (ID BIGINT AUTO_INCREMENT NOT NULL, NAME VARCHAR(255), OCCURRENCE INTEGER, PRIMARY KEY (ID))
MySQLSyntaxErrorException?现在这肯定是错的     
已邀请:
根据http://www.oracle.com/technology/products/ias/toplink/JPA/essentials/toplink-jpa-extensions.html#Java2DBSchemaGen toplink没有更新退出表的选项,我不确定是否无论如何,我相信它会做正确的事情。 您可以配置toplink以生成sql脚本,然后您必须手动执行以创建所有表。文件名和位置可以像这样配置:
<property name="toplink.ddl-generation" value="create-tables"/>
<property name="toplink.ddl-generation.output-mode" value="sql-script"/>
<property name="toplink.create-ddl-jdbc-file-name" value="createDDL.sql"/>
<property name="toplink.drop-ddl-jdbc-file-name" value="dropDDL.sql"/>
<property name="toplink.application-location" value="/tmp"/>
    
  我想[我的] JPA [提供者]检查表是否已经存在,如果没有创建它们,但我找不到上面属性的值,这样做。 很奇怪,根据有关
toplink.ddl-generation
扩展名的TopLink Essentials文档,
create-table
应保持现有表格不变:   用于架构生成的TopLink JPA扩展      指定数据描述符语言   (DDL)你想要的生成动作   你的JPA实体。指定DDL   生成目标,见   
toplink.ddl-generation.output-mode
。      有效值:
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
        
none
- 不产生DDL;没有   架构生成。   
create-tables
- 为。创建DDL   不存在的表格;留下现有的   表格不变(另见   
toplink.create-ddl-jdbc-file-name
)。   
drop-and-create-tables
- 为所有表创建DDL;放弃所有现有的   桌子(另见   
toplink.create-ddl-jdbc-file-name
  和   
toplink.drop-ddl-jdbc-file-name
)。         如果你在外面使用持久性   EJB容器,并希望   创建DDL文件而不创建   表,另外定义了一个Java   系统属性
INTERACT_WITH_DB
和   将其值设置为
false
。     
Liquibase(http://www.liquibase.org)擅长这一点。完全习惯它需要一些时间,但我认为这是值得的。 Liquibase方式独立于您使用的JPA持久性提供程序。实际上,它甚至与数据库无关。     

要回复问题请先登录注册