代码生成工作正常。 db char(1)field1,field2映射到代码库中的Boolean。
<forcedTypes>
<forcedType>
<name>BOOLEAN</name>
<expressions>field1,field2
</expressions>
</forcedType>
</forcedTypes>
但是在插入数据库时,我得到了
A truncation error was encountered trying to shrink CHAR 'false' to length 1. Error
JOOQ生成的sql为insert into mytable ("field1", "field2", ) values (cast(? as boolean), cast(? as boolean))
这是尝试在DB中插入false / true但我想插入1或0。 需要帮忙。
我有Derby for Dev功能测试和oracle用于其他环境。我使用相同的JOOQ生成的存根(使用Derby DB生成)用于数据库。对于Oracle而言,这似乎工作得很好,但对Derby来说却不行。
http://blog.jooq.org/tag/boolean-data-type/表示Oracle支持,Derby不支持此转换。需要一个解决方法。
答案 0 :(得分:1)
您目前正在使用代码生成器配置中的功能"data type rewriting"。这意味着jOOQ的运行时不知道数据库中的实际数据类型。它的行为就像数据类型 IS BOOLEAN
一样。这意味着:
boolean
绑定值转换为1
或0
NUMBER
列,或'1'
或'0'
}对于字符串列。BOOLEAN
列。如果您想以这种方式进行,则必须使Derby列类型为实际BOOLEAN
,而不是CHAR(1)
。
Converter
另一种选择是使用jOOQ Converter
代替,在将值boolean
转换为Java String
之前,然后将值传递给数据库。这样,您可以在两个数据库中使用相同的数据类型。 This is documented here, in the manual