JOOQ forcedTypes to Boolean
JOOQ forcedTypes to Boolean
代码生成工作正常。 db char(1) field1,field2 映射到代码库中的布尔值。
<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))
这试图在数据库中插入 false/true,但我想插入 1 或 0。
需要帮忙。
我有用于开发功能测试的 Derby 和用于其他环境的 oracle。我对两个数据库使用相同的 JOOQ 生成的存根(使用 Derby DB 生成)。这似乎适用于 Oracle,但不适用于 Derby。
http://blog.jooq.org/tag/boolean-data-type/ 指出 Oracle 支持而 Derby 不支持这种转换。需要变通。
在代码生成器中使用数据类型重写
您目前正在代码生成器配置中使用 "data type rewriting" 功能。这意味着 jOOQ 的运行时不知道数据库中的实际数据类型。它的行为就好像数据类型确实是 IS BOOLEAN
。这意味着:
- Oracle JDBC 驱动程序会将您的 Java
boolean
绑定值转换为 1
或 0
用于 NUMBER
列,或者转换为'1'
或 '0'
用于字符串列。
- Derby JDBC 驱动程序不会转换此类型,而是期望数据库中有一个真实的
BOOLEAN
列。
如果您想继续这样做,您必须将 Derby 列类型设置为实际的 BOOLEAN
,而不是 CHAR(1)
。
在代码生成器中指定一个Converter
另一种选择是使用 jOOQ Converter
,将 Java boolean
翻译成 Java String
first,然后将值传递给数据库。这样,您就可以在两个数据库中使用相同的数据类型。 This is documented here, in the manual.
代码生成工作正常。 db char(1) field1,field2 映射到代码库中的布尔值。
<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))
这试图在数据库中插入 false/true,但我想插入 1 或 0。 需要帮忙。
我有用于开发功能测试的 Derby 和用于其他环境的 oracle。我对两个数据库使用相同的 JOOQ 生成的存根(使用 Derby DB 生成)。这似乎适用于 Oracle,但不适用于 Derby。
http://blog.jooq.org/tag/boolean-data-type/ 指出 Oracle 支持而 Derby 不支持这种转换。需要变通。
在代码生成器中使用数据类型重写
您目前正在代码生成器配置中使用 "data type rewriting" 功能。这意味着 jOOQ 的运行时不知道数据库中的实际数据类型。它的行为就好像数据类型确实是 IS BOOLEAN
。这意味着:
- Oracle JDBC 驱动程序会将您的 Java
boolean
绑定值转换为1
或0
用于NUMBER
列,或者转换为'1'
或'0'
用于字符串列。 - Derby JDBC 驱动程序不会转换此类型,而是期望数据库中有一个真实的
BOOLEAN
列。
如果您想继续这样做,您必须将 Derby 列类型设置为实际的 BOOLEAN
,而不是 CHAR(1)
。
在代码生成器中指定一个Converter
另一种选择是使用 jOOQ Converter
,将 Java boolean
翻译成 Java String
first,然后将值传递给数据库。这样,您就可以在两个数据库中使用相同的数据类型。 This is documented here, in the manual.