JOOQ生成器:缺少名称

时间:2015-10-12 12:22:11

标签: java postgresql gradle jooq

我试图用Postgres和Gradle设置JOOQ。

每当我运行生成任务时,我得到~20 Ambiguous type names

  

不明确的类型名称:对象pg_catalog.generate_series   生成一个类型one.dbtest.db.pg_catalog.tables.GenerateSeries   与现有类型冲突   one.dbtest.db.pg_catalog.tables.GenerateSeries对某些操作   系统。使用自定义生成器策略消除类型的歧义。   不明确的类型名称:对象pg_catalog.generate_series   生成一个类型one.dbtest.db.pg_catalog.tables.GenerateSeries   与现有类型冲突   one.dbtest.db.pg_catalog.tables.GenerateSeries对某些操作   系统。使用自定义生成器策略消除类型的歧义。

以及其中的数百个:

  

缺少名称:对象jsonb_exists_all包含一列   在位置2没有名称缺少名称:对象   jsonb_exists_any在第1位缺少一个没有名字的列   name:对象jsonb_exists_any包含一个没有的列   名称在位置2缺少名称:对象jsonb_ge拥有一个   位置1没有名称的列缺少名称:对象   jsonb_ge在位置2处保留一个没有名称的列缺少名称
  :对象jsonb_gt在位置1缺少一个没有名称的列   name:Object jsonb_gt包含一个没有名称的列   位置2缺少名称:对象jsonb_hash包含一列   在位置1没有名称缺少名称:对象   jsonb_in在第1位保留一个没有名字的列缺少名称
  :对象jsonb_le在位置1缺少一个没有名称的列   name:Object jsonb_le包含一个没有名称的列   位置2缺少名称:对象jsonb_lt包含一列   在位置1没有名称缺少名称:对象   jsonb_lt在位置2处保留一个没有名称的列缺少名称
  :对象jsonb_ne在位置1缺少一个没有名称的列   name:Object jsonb_ne包含一个没有名称的列   第2位

我是否需要排除pg *类型?

生成任务取自JOOQ样本:

task generate << {
  def writer = new StringWriter()
  def xml = new groovy.xml.MarkupBuilder(writer)
    .configuration("xmlns": "http://www.jooq.org/xsd/jooq-codegen-3.7.0.xsd") {
    jdbc() {
      driver("org.postgresql.Driver")
      url("jdbc:postgresql://localhost/pagila")
      user("xxx")
      password("xxx")
    }
    generator() {
      database() {
        name { mkp.yield( 'org.jooq.util.postgres.PostgresDatabase' ) }
        exclude("pg.*")
      }
      generate() {}
      target() {
        packageName("one.dbtest.db")
        directory("src")
      }
    }
  }

  //println writer.toString()

  org.jooq.util.GenerationTool.main(
    javax.xml.bind.JAXB.unmarshal(
        new StringReader(writer.toString()),
        org.jooq.util.jaxb.Configuration.class
    )
  )
}

更新:数据库是来自http://pgfoundry.org/projects/dbsamples

的pagila

1 个答案:

答案 0 :(得分:3)

对于Postgres,你还必须指定输入模式,所以它是:

generator() {
  database() {
    name { mkp.yield( 'org.jooq.util.postgres.PostgresDatabase' ) }
    inputSchema("public")
  }
[..]