【发布时间】:2019-09-20 06:28:37
【问题描述】:
上下文 - 我正在尝试 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
Gradle 配置 =>
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
- 进入项目目录,启动 postgis docker 容器
docker-compose up
- 同样,要删除 postgis docker 容器运行
docker-compose down
- 运行添加一个简单的
City表的迁移,该表包含Point类型和
./gradlew flywayMigrate
我在第二次迁移中添加了几行,以验证数据库结构是否正常工作。在 build.gradle 文件中连接到 Postgres 实例的详细信息。
使用
生成 jooq 文件
./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'
}
这允许代码编译。
【问题讨论】:
-
那些(例如
st_valuecount)是重载的表值函数吗? -
作为记录,这也被报告为github.com/jOOQ/jOOQ/issues/8587上的一个错误
-
您能解释一下
database部分的位置吗?我假设你把它放在你的build.gradle文件中。你能解释一下你把它放在文件的哪里吗? Gradle 对隐式配置方式的广泛使用让那些没有花费无数时间学习其复杂细节的人难以理解。 -
@M.Leonhard 在这里github.com/raj-saxena/JooqBreaksWithPostGis/blob/master/…
标签: postgresql build.gradle postgis jooq