我在JOOQ中查询时遇到问题。如何在jooq中使用有符号整数类型,因为它不允许将其强制转换为UIntegers
。我用同样的方法得到了错误。
public List<Movies> getMovie(int movid) {
return dsl.select().from(MOVIES).where(MOVIES.MOVIE_ID.equal(movid)).limit(1).fetch().into(Movies.class);
}
答案 0 :(得分:6)
我怀疑您的MOVIE_ID
列在MySQL数据库中的类型为INTEGER UNSIGNED
。这就是为什么jOOQ的代码生成器为它生成Field<UInteger>
的原因。您有三种选择:
您必须将movid
变量转换为UInteger
:
MOVIES.MOVIE_ID.equal(UInteger.valueOf(movid))
......或:
MOVIES.MOVIE_ID.equal(MOVIES.MOVIE_ID.getDataType().convert(movid))
您可以指示jOOQ代码生成器不生成无符号整数。
<!-- Generate jOOU data types for your unsigned data types, which are
not natively supported in Java.
Defaults to true -->
<unsignedTypes>false</unsignedTypes>
或者,您也可以在代码生成器配置中使用<forcedTypes/>
来强制执行单个列的无符号类型。
For details, see the relevant section in the manual
另一种选择是停止在数据库中使用UNSIGNED
数据类型,如果您更喜欢使用签名类型。