我是 JOOQ 的新手,看起来有点奇怪为什么我的许多列类型安排为整数,而他们在不久的将来可能很容易成为Longs。
即使count(*)
结果也必须输入整数!
是否有设置在当前项目中设置长默认或以任何方式设置全局漫长? (可能适用的地方)
如果这是不可能的..是否有理由将其作为整数?'
这是Scala
中的一些代码示例:
def loggedInUserOwnsAccount(userId: Long) = {
selectCount().
from(LOGGED_IN, EMAIL_ACCOUNT).
where(LOGGED_IN.USER_ID.equal(EMAIL_ACCOUNT.PASS_ID)).
and(LOGGED_IN.USER_ID.equal(userId.toInt)).asInstanceOf[ResultQuery[Record]]
}
请注意,重要的部分是我需要使用此代码userId.toInt
将Long转换为Int,否则将无法编译
答案 0 :(得分:4)
在您的数据库中,LOGGED_IN.USER_ID
可能是SQL类型INT
,它在Java Integer
或Scala Int
中具有最佳等效性。如果您想使用Long
,则应将数据库列的类型更改为BIGINT
。
没有办法绕过这个“限制”,这在我看来是件好事。例如,您无法将Long
插入INT
数据库列。使用jOOQ,Java / Scala编译器可以防止意外发生。
Scala中存在针对此类问题的解决方法。当然,您可以通过扩展现有的jOOQ-scala tools来尝试应用隐式转换。
trait SNumberField[T <: Number] extends SAnyField[T] {
// [...]
def equal(value : Number) : Condition;
def equal(value : Field[Number]) : Condition;
}
abstract class NumberFieldBase[T <: Number](override val underlying: Field[T])
extends AnyFieldBase[T] (underlying)
with SNumberField[T] {
// [...]
def equal(value : Number)
= underlying.equal(underlying.getDataType().convert(value));
def equal(value : Field[_ <: Number])
= underlying.equal(value.coerce(underlying.getDataType());
}