我有一个与jOOQ一起使用的SQLite数据库。
当我使用jOOQ的代码生成工具时,它会按预期构建所有表和记录类。
但是,所有SQLite INTEGER
列都会在生成的代码中变为java.lang.Integer
个字段。
问题是SQLite INTEGER's
最多可以存储一个64位有符号整数,其中java.lang.Integer
只是一个32位有符号整数。
是否可以告诉jOOQ对这些列使用java.lang.Long
(64位签名)?
答案 0 :(得分:5)
实际上,SQLite中没有实际的INTEGER
数据类型,只有INTEGER
affinity,它实际上可以存储多达64位的有符号整数。但是,当您使用DDL时,通常会使用其中一个(大多数)标准"类型名称",可以在CREATE TABLE
语句和CAST
表达式中使用:
为了让jOOQ生成java.lang.Long
,您需要在BIGINT
语句中使用INT8
或CREATE TABLE
之一。如果您使用INT
或INTEGER
,jOOQ将假设您确实打算存储32位有符号整数,从而存储java.lang.Integer
值。
请注意,jOOQ的代码生成器配置还允许您rewrite data types based on column names or column types:
<forcedType>
<!-- Specify any data type from org.jooq.impl.SQLDataType -->
<name>BIGINT</name>
<!-- Add a Java regular expression matching fully-qualified columns.
Use the pipe (union operator) to separate several expressions.
If provided, both "expressions" and "types" must match. -->
<expression>.*\.IS_VALID</expression>
<!-- Add a Java regular expression matching data types to be forced
to have this type. If provided, both "expressions" and "types" must match. -->
<types>.*</types>
</forcedType>