0

我对卡宴的 PK 生成策略有疑问。

我将 PostgreSQL 9.6 与 Apache Cayenne 4.0.B1 一起使用。

这是我在 postgres 中的表:

create table ui_template (
  id varchar(50) primary key default uuid_generate_v1(),
  path varchar(300) not null,
  type varchar(50) not null
);

然后我在 Cayenne Modeler 中执行 Tools -> Reengineer Database Schema。我得到了桌子和实体。现在我必须将 PK Generation Strategy 设置为 Database-Generated,让 DB 生成我的 PK。当我通过 ObjectContext 插入对象时,一切正常。但是,如果我正在运行 gradle task cdbimport,它会用另一个没有生成策略的文件覆盖我的 datamap.map.xml 文件。请给我建议我做错了什么。

这是我的毕业任务

buildscript {
    // add Maven Central repository
    repositories {
        mavenCentral()
    }
    // add Cayenne Gradle Plugin
    dependencies {
        classpath group: 'org.apache.cayenne.plugins', name: 'cayenne-gradle-plugin', version: '4.0.B1'
        classpath group: 'org.postgresql', name: 'postgresql', version: '42.1.3'

    }
}
// apply plugin
apply plugin: 'org.apache.cayenne'

// set default DataMap
cayenne.defaultDataMap 'resources/datamap.map.xml'

// add Cayenne dependencies to your project
dependencies {
    // this is a shortcut for 'org.apache.cayenne:cayenne-server:VERSION_OF_PLUGIN'
    compile cayenne.dependency('server')
    compile cayenne.dependency('java8')
}


cdbimport {
    dataSource {
        driver 'org.postgresql.Driver'
        url 'jdbc:postgresql://localhost:5432/my_db'
        username 'user'
        password 'pass'
    }
}
4

1 回答 1

1

您没有做错任何事,似乎您在cdbimport中发现了一个弱点。在您的情况下,Cayenne 不理解默认值,因为 Postgres DB Cayenne 仅将串行列标记为 db-generated。

您可以将 PK 更改为串行(除非您有一些特殊要求,这总是一个好主意),或者您可以尝试从cdbimport任务中排除这些 PK,如下所示:

cdbimport {
    //...
    includeTable 'ui_template', {
        excludeColumns 'id'
    }
}

请注意,排除 PK 可能会导致导入关系出现问题。此外,如果您使用includeTable,您应该明确列出所有必需的表。

于 2017-08-02T14:47:37.933 回答