我正在使用multiset构造函数来获取事件的相关位置集。位置表使用几何Postgis类型,所以我可以抽象它,如果它是一个点,线或面积,将其保存为十六进制表示。
这是表定义
CREATE TABLE events.locations(
id bigint not null PRIMARY KEY,
event_id varchar not null references events.generic_event(id),
location geometry not null
);
这是一个样本内容
| id|事件ID|位置|
| - -----|- -----|- -----|
| 1| 1| 01010000007432F387985F434064E6BB885C4C3BC0|
| 2| 1| 0101000000059415A95C9145406CEA0B7D9C3238C0|
当我运行这个选择和嵌套的多重集时
dsl.select(GENERIC_EVENT.asterisk(),
multiset(
select(LOCATIONS.LOCATION)
.from(LOCATIONS)
.where(LOCATIONS.EVENT_ID.eq(GENERIC_EVENT.ID))
))
.from(GENERIC_EVENT)
.fetch()
Jooq生成这个查询
select "events"."generic_event".*,
(select coalesce(jsonb_agg(jsonb_build_array("v0")), jsonb_build_array())
from (
select "events"."locations"."location" as "v0"
from "events"."locations"
where "events"."locations"."event_id" = "events"."generic_event"."id"
) as "t"
)
from "events"."generic_event";
使用事件ID和位置作为json查询结果
[[{""type"": ""Point"", ""coordinates"": [41.64214096573672, -4.777311334633507]}], [{""type"": ""Point"", ""coordinates"": [41.64778522299253, -4.710878384400815]}], [{""type"": ""Point"", ""coordinates"": [38.746842378376556, -27.29828695857431]}], [{""type"": ""Point"", ""coordinates"": [43.13564027360557, -24.19770032444869]}]]
我的问题是我将几何类型存储为十六进制字符串,并且我希望以相同的方式获取它,因为我已经注册了一个自定义绑定来使用十六进制。对于只获取几何体的查询,它工作得很好,我得到了十六进制,但是对于多集,生成的查询返回坐标,所以当绑定器试图构建java类型时,我得到了一个错误。
有什么方法可以克服这个问题吗?
1条答案
按热度按时间zf9nrax11#
此错误已在jOOQ 3.18.0和3.17.6中修复,以在
MULTISET
模拟中添加对GEOMETRY
类型的支持:请注意,
GEOMETRY
支持是商业jOOQ版本的一个特性,所以这个bug修复在jOOQ开源版中不可用。