[英]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.