2013-05-21 150 views
1

我的應用程序在我包含自定義類型轉換器之前工作正常。我需要將jOOQ UInteger轉換爲Integer,所以我包含了一個類型轉換器來實現這一點。發佈此更改,我得到一個MySQL語法錯誤的限制和偏移量。jOOQ自定義問題類型轉換

然後在調試時,我發現所有正在提供的Integer值(包括限制和偏移值)都轉換爲UInteger(由於類型轉換器),並轉而爲字符串,因爲UInteger不是默認類型。

我可以通過鏈接jooq issue with limit and offset提供的解決方案解決此問題,但我想了解一些細節。

  1. 如果我使用settings.setStatementType(StatementType.STATIC_STATEMENT)我不能得到事先準備好的聲明,我可能會錯過的PreparedStatement的優勢。

  2. 如果我使用Factory.inline來綁定所有整數內聯值,我必須對我的完整應用程序執行此操作,如果我錯過了某些操作,會導致嚴重問題。

請幫助我解決問題或給我一些相同的建議。

+0

我覺得你在這個問題中混合了幾件事:類型轉換,綁定變量內聯。你現在想解決什麼樣的問題? –

+0

我想使用不帶綁定變量的內聯類型轉換。因爲我不能綁定所有變量內聯 – developer

+0

我仍然不太明白轉換和變量綁定是如何相關的......這是關於試圖避免一些轉換?你面臨的最初問題是什麼? –

回答

0

我認爲你正在尋找的是一種完全禁用無符號整數類型生成的方法。相關的代碼生成標誌被記錄在這裏:

http://www.jooq.org/doc/3.0/manual/code-generation/codegen-advanced

的摘錄:

<!-- Generate jOOU data types for your unsigned data types, which are 
    not natively supported in Java. 
    Defaults to true --> 
<unsignedTypes>false</unsignedTypes> 

否則,有一個無證的解決方案來強制類型到另一種SQL類型,而不是在一個轉換器。該文檔的任務是這樣的一個位置:

https://github.com/jOOQ/jOOQ/issues/2095

這不是很好的測試,但在轉換的情況下UIntegerInteger之間可能工作得非常好。從集成測試的例子可以看出here

<forcedType> 
    <name>UUID</name> 
    <expressions>(?i:(.*?.)?T_EXOTIC_TYPES.UU)</expressions> 
</forcedType> 

你的情況:

<forcedType> 
    <name>INTEGER</name> 
    <expressions>YOUR_COLUMN_MATCHING_EXPRESSION_HERE</expressions> 
</forcedType> 

請注意,您可以將您的數據庫架構隨時更改,以實際持有簽署的類型,而不是無符號的。

+0

是啊,這是我第一次嘗試的,但我的老人不滿意,因爲它完全刪除了無符號類型的概念。在某些情況下,我們需要無符號類型,而不是一些。這就是爲什麼我們選擇了另一種稱爲自定義類型轉換器的選項。 – developer

+0

如果現在是一個設計缺陷,我希望在不久的將來能夠解決這個問題嗎? – developer

+0

@Yuvaraj:如果某些列不需要「無符號」,那麼爲什麼要在數據庫中聲明它們是無符號的?不幸的是,我無法給你任何關於何時解決「轉換器問題」的保證,但請參閱最新解決方案的答案。 –