gpt4 book ai didi

postgresql - 为什么 Jooq 代码生成与 PostGIS 中断?

转载 作者:行者123 更新时间:2023-11-29 13:40:35 26 4
gpt4 key购买 nike

上下文 - 我正在试用 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'
}

这允许代码编译。

最佳答案

这听起来很像 https://github.com/jOOQ/jOOQ/issues/4055 . jOOQ 3.11 目前无法处理任何支持表值函数的 RDBMS 中的重载表值函数。您最好的选择是使用 <excludes> 从代码生成中排除所有受影响的函数。 :

https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-includes-excludes/

关于postgresql - 为什么 Jooq 代码生成与 PostGIS 中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com