首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA和toplink create-table on,如果它们还不存在?

JPA和toplink create-table on,如果它们还不存在?
EN

Stack Overflow用户
提问于 2010-07-19 17:37:54
回答 3查看 9.1K关注 0票数 6

看起来jpa让我问了很多问题。

添加了以下内容

代码语言:javascript
复制
<property name="toplink.ddl-generation" value="create-tables"/>

我的JPA应用程序总是在运行时创建表,这会在表已经存在的情况下导致异常。我希望JPA检查表是否已经存在,如果不存在,则创建它们,但是我找不到上面执行此操作的属性的值。

那么,如果我只是关闭它,有没有办法在某个时候手动告诉JPA创建所有的表呢?

更新下面是我得到的异常

代码语言:javascript
复制
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?!现在这肯定是错的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-19 18:58:44

根据http://www.oracle.com/technology/products/ias/toplink/JPA/essentials/toplink-jpa-extensions.html#Java2DBSchemaGen toplink没有更新现有表的选项,我不确定我是否会相信它会做正确的事情。您可以将toplink配置为生成一个sql脚本,然后必须手动执行该脚本才能创建所有表。文件名和位置可以这样配置:

代码语言:javascript
复制
<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"/>
票数 5
EN

Stack Overflow用户

发布于 2010-07-19 21:40:57

我希望我的JPA提供者检查这些表是否已经存在,如果不存在就创建它们,但是我找不到上面这个属性的值。

奇怪的是,根据关于toplink.ddl-generation扩展的TopLink软件包文档,create-table应该保持现有的表不变:

TopLink JPA Extensions for Schema Generation

为JPA实体指定您想要的数据描述符语言(DDL)生成操作。要指定DDL生成目标,请参见toplink.ddl-generation.output-mode

有效值: oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

  • none -不生成DDL;无模式为generated.
  • create-tables -为不存在的表创建DDL;保持现有表不变(另请参阅toplink.create-ddl-jdbc-file-name).
  • drop-and-create-tables -为所有表创建DDL;删除所有现有表(另请参阅toplink.create-ddl-jdbc-file-nametoplink.drop-ddl-jdbc-file-name).

如果您在EJB容器之外使用持久性,并且希望在不创建表的情况下创建DDL文件,则另外定义一个Java system属性INTERACT_WITH_DB并将其值设置为false

票数 2
EN

Stack Overflow用户

发布于 2010-07-20 00:11:07

Liquibase (http://www.liquibase.org)在这方面做得很好。完全习惯它需要一些时间,但我认为这是值得的。

Liquibase-way独立于您使用的JPA持久性提供程序。实际上,它甚至是数据库不可知的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3279902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档