这可能是由于我对 Squeryl 的工作方式的误解。我的实体定义为:
case class Wallet(userid: Int, amount: Long)
extends KeyedEntity[Int] with Optimistic {
def id = userid
}
Run Code Online (Sandbox Code Playgroud)
我的表变量定义为:
val walletTable = table[Wallet]("wallets")
on(walletTable) {
w =>
declare {
w.userid is (primaryKey)
}
}
Run Code Online (Sandbox Code Playgroud)
然后我只是调用一个方法来尝试向钱包中添加钱:
val requestedWallet = wallet.copy(amount = wallet.amount + amount)
try {
inTransaction {
walletTable.update(requestedWallet)
}
Run Code Online (Sandbox Code Playgroud)
在我调用更新的那一行,抛出一个异常: [ClassCastException: java.lang.Integer cannot be cast to org.squeryl.dsl.CompositeKey]
我根本没有使用复合键,所以这很令人困惑。这是否与我的 id 字段不被称为“id”,而是“userid”这一事实有关?
当我尝试你正在做的事情时,我得到了同样的行为。似乎出于某种原因id不能是别名,除非它是复合键(至少在 0.9.5 中)。您可以解决这个问题,并通过以下方式获得相同的结果:
case class Wallet(@Column("userid") id: Int, amount: Long)
extends KeyedEntity[Int] with Optimistic {
def userid = id
}
Run Code Online (Sandbox Code Playgroud)
列注释将在数据库中查找该userid字段,并将改为ida val。然后您可以userid为一致性使用别名。
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |