Apache cayenne - cdbimport 任务恢复 PK 生成策略做默认



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

我正在使用PostgreSQL 9.6和Apache Cayenne 4.0.B1。

这是我的邮政表格:

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 中做工具 ->重新设计数据库模式。 我得到了桌子和恩蒂。 现在,我必须将 PK 生成策略设置为"数据库生成",以便数据库生成我的 PK。当我通过 ObjectContext 插入对象时,一切正常。但是,如果我正在运行 gradle 任务 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'
}
}

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

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

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

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

最新更新