簡體   English   中英

用戶定義類型過濾時如何在jooq中形成where子句

[英]How to form where clause in jooq when filtering by user defined type

我在jooq(3.8.7)中使用postgresql(10.2),可以說我有一個類型和一個表,例如:

CREATE TYPE my_type AS (
    id INTEGER,
    name TEXT
);

CREATE table my_table (
    id INTEGER,
    something my_type 
);

然后,如何使用jooq獲取my_table的所有記錄,其中my_table.something.name ='test'? 我試圖做這樣的事情:

ctx.selectFrom(MY_TABLE)
   .where(MY_TABLE.SOMETHING.NAME.eq("test")) \\ SOMETHING is a TableField 
   ...                                        \\ and does not have NAME field

但這不起作用(在代碼注釋中說明)。 這是我要在jooq中執行的操作:

SELECT * FROM my_table WHERE (something).name = 'test';

jOOQ 3.11當前未實現通過DSL訪問用戶定義的類型屬性。 相關的待處理功能請求位於此處: https : //github.com/jOOQ/jOOQ/issues/228

與往常一樣,在這種限制下運行時,您可以訴諸使用簡單的SQL模板

ctx.selectFrom(MY_TABLE)
   .where("{0}.{1} = {2}", MY_TABLE.SOMETHING, MY_TYPE.NAME, DSL.val("test"))
   ...

當然,如果您經常執行此操作,則可能需要將這種邏輯包裝到自己的客戶端模板API中,以提高重用相似模式的能力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM