我使用Jooq(没有codegen)创建SQL查询并将其发送到数据库。我测试的表只有2列,ID是字符串,数据列是JSONB。
有趣的是,如果我以这种格式生成一个查询:
select * from test_table where id = 'some_id'
字符串
我得到的Map中有一个String和一个JSONB(我猜和预期的一样)。
但是,如果我将查询更改为:
select id, data from test_table where id = 'some_id'
型
由这样的代码生成:
select(field(ID_COLUMN), field(DATA_COLUMN))
.from(DSL.table("test_table"))
.where(field(ID_COLUMN).eq(id))
.fetch().intoMaps();
型
(for第一个例子,它是相同的,但与asterisk()
,而不是两个字段)
我得到的Map有一个String作为ID,但是现在,数据列是一个包含JSONB数据的PG对象。
我可以很好地处理这两种类型中的任何一种,但我希望了解是什么触发了更改,以及我是否可以依赖于基于我的实现的一种类型或另一种类型。
1条答案
按热度按时间slsn1g291#
您可能有充分的理由使用jOOQ而不使用代码生成器which would help with all of these data type related problems(主要的理由是只有在运行时才知道的动态模式,其中代码生成不起作用),但即使您没有使用代码生成器,也可以显式地向jOOQ提示类型,例如。
字符串
否则,jOOQ将不知道PostgreSQL返回什么,它不能为你做决定。我不会依赖于服务器或驱动程序的任何隐式行为。