2011-07-17 44 views
2

我有一個表名稱爲「BID」,其數據類型設置爲NUMERIC(20,0)。現在我知道它永遠不會是一個十進制/浮點值,但始終是一個int/long,即自然數。代碼生成器將NUMERIC(20,0)解釋爲BIGDECIMAL,但它應該解釋爲Long

有沒有一種方法讓代碼生成器在生成的模型類中生成一個Long變量,而不是它現在生成的java.math.BigDecimal。可以在jooq.properties中設置嗎?

+1

爲什麼不在數據庫管理系統中使用int或更長? – gbn

+0

@gbn:NUMERIC(20,0)可以保存比BIGINT更大的數字(Java中的'Long',它只有19位小數)... –

+0

@Lukas Eder:NUMERIC(20,0)(+ - 9.99 E20)僅僅是64位以上的signed int(+ - 9.2E18)。更高的數字,是的,但高達19/20是32位限制的經典(例如SQL Server 2000之前的傳統)解決方法 – gbn

回答

1

此「功能」目前僅適用於Oracle數據庫,其中NUMBER是唯一可用的數字類型。使用Oracle with jOOQ,NUMBER(20, 0)將映射到java.math.BigInteger而不是java.math.BigDecimal

此行爲也可用於下一版本1.6.3中的其他RDBMS。見

https://sourceforge.net/apps/trac/jooq/ticket/639

除此之外,在代碼生成的數據類型映射的壓倒一切的是目前不可能的,但你可以使用BIGINT由GBN的建議,如果你並不真的需要20個十進制數字。 BIGINT可以容納大多數19位小數......