上下文-我正在尝试Postgres的地理信息系统扩展PostGis,该扩展可以将故事的经纬度设置为Point,并对其进行操作。
If I understand correctly,然后我需要添加一个自定义转换器,该转换器可以在JOOQ和PostGis之间转换point
并将其添加到gradle文件中。
问题-生成jooq代码时,很少会错误地生成文件,并且两次定义的字段都会使编译失败。这些是:
<configured-generation-dir>/tables/StValuecount.java
<configured-generation-dir>/tables/records/StValuecountRecord.java
<configured-generation-dir>/tables/records/StValuepercentRecord.java
<configured-generation-dir>/tables/_StValuecount.java
<configured-generation-dir>/tables/records/_StValuecountRecord.java
<configured-generation-dir>/tables/_StHistogram.java
<configured-generation-dir>/tables/records/_StHistogramRecord.java
<configured-generation-dir>/tables/_StQuantile.java
分级配置 =>
jooq{
myAwesomeApp(sourceSets.main){
logging = 'WARN'
jdbc {
driver = 'org.postgresql.Driver'
url = db_url
user = db_user
password = db_password
}
generator {
name = 'org.jooq.codegen.DefaultGenerator'
strategy {
name = 'org.jooq.codegen.DefaultGeneratorStrategy'
}
database {
name = 'org.jooq.meta.postgres.PostgresDatabase'
inputSchema = 'public'
forcedTypes {
forcedType {
userType = 'org.postgis.Point'
converter = 'com.example.JooqBreaksWithPostGis.jooq.converters.PostgresPointJooqConverter'
expression = '.*\\.point'
types = '.*'
}
}
}
generate {
routines = false
relations = true
deprecated = false
records = true
immutablePojos = false
fluentSetters = true
}
target {
packageName = 'jooq.fancy.app'
directory = 'src/main/java/generated'
}
}
}
}
我在做什么错了?
我还创建了一个最小的project,在此我重现了该问题,以防有人想要快速尝试该问题。
git clone git@github.com:raj-saxena/JooqBreaksWithPostGis.git
docker-compose up
docker-compose down
City
表,其中包含Point
类型的./gradlew flywayMigrate
我在第二次迁移中添加了几行以验证数据库结构是否正常工作。在build.gradle文件中连接到Postgres实例的详细信息。
使用
./gradlew generateMyAwesomeAppJooqSchemaSource
验证文件是否在配置的src/main/java/generated
目录中生成。
验证上述文件无法编译。
采用Lukas的advice,我将排除配置添加到jooq配置中,如下所示:
database {
name = 'org.jooq.meta.postgres.PostgresDatabase'
...
excludes = '.*ST_ValueCount' +
'|.*St_Valuepercent' +
'|.*St_Histogram' +
'|.*St_Quantile' +
'|.*St_Approxhistogram' +
'|.*St_PixelOfValue' +
'|.*St_Approxquantile' +
'|.*ST_Tile'
}
这允许代码进行编译。
答案 0 :(得分:0)
这听起来很像https://github.com/jOOQ/jOOQ/issues/4055。 jOOQ 3.11当前无法在任何支持表值函数的RDBMS中处理重载的表值函数。最好的选择是使用<excludes>
:从代码生成中排除所有受影响的函数: