我需要使用JOOQ将表名强制转换为对象标识符。在简单的SQL中,我会做:
'my_table'::regclass::oid
我找不到用于强制转换值的DataType(它存在PostgresDataType.OID
,但不存在PostgresDataType.REGCLASS
或类似的类型,也不赞成直接使用PostgresDataType
(。
我也玩过DSL.inline
、DSL.val
,但无法获得所需的输出。
更新
我意识到有一个PostgresDSL.oid
返回Field<Long>
并生成以下输出"my_table".oid
,但我没有表的引用(我将表名作为文本(,所以它对我的用例无效。
有没有办法通过JOOQ将表名强制转换为Postgres对象标识符(OID(?
经过一段时间的测试,我找到了一个可行的解决方案(不确定是最好的(。
DSL.field("{0}::regclass::oid", DSL.inline(name))
通过这种方式,我们创建了一个";字段";所有需要硬编码的铸件,并将值设置为绑定。