代码之家  ›  专栏  ›  技术社区  ›  Nils

如果JPA和toplink还不存在,它们会在上创建表吗?

  •  6
  • Nils  · 技术社区  · 14 年前

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

    加上这个

    <property name="toplink.ddl-generation" value="create-tables"/>
    

    我得到一个例外

    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))
    

    3 回复  |  直到 14 年前
        1
  •  5
  •   Jörn Horstmann    14 年前

    根据 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"/>
    
        2
  •  2
  •   Pascal Thivent    14 年前

    我希望[my]JPA[provider]检查表是否已经存在,如果没有创建它们,但是我找不到上面的属性的值。

    toplink.ddl-generation 分机, create-table

    TopLink JPA Extensions for Schema Generation

    指定数据描述符语言 生成目标,请参见 toplink.ddl-generation.output-mode .

    oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

    如果你在外面使用持久性 EJB容器,并希望 创建DDL文件而不创建 表,另外定义了一个Java 系统属性 INTERACT_WITH_DB 将其值设置为 false .

        3
  •  0
  •   Jan    14 年前

    液化酶( http://www.liquibase.org )他很擅长这个。完全习惯它需要一些时间,但我认为这是值得的。

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