尝试使用 Squeryl 插入时出现 ClassCastException
Posted
技术标签:
【中文标题】尝试使用 Squeryl 插入时出现 ClassCastException【英文标题】:ClassCastException when trying to insert with Squeryl 【发布时间】:2012-12-18 19:17:20 【问题描述】:这可能是由于我对 Squeryl 的工作原理有误解。我的实体定义为:
case class Wallet(userid: Int, amount: Long)
extends KeyedEntity[Int] with Optimistic
def id = userid
我的表变量定义为:
val walletTable = table[Wallet]("wallets")
on(walletTable)
w =>
declare
w.userid is (primaryKey)
那我只是调用一个方法来尝试往钱包里加钱:
val requestedWallet = wallet.copy(amount = wallet.amount + amount)
try
inTransaction
walletTable.update(requestedWallet)
在我调用更新的那一行,抛出了一个异常: [ClassCastException: java.lang.Integer 无法转换为 org.squeryl.dsl.CompositeKey]
我根本没有使用复合键,所以这很令人困惑。这是否与我的 id 字段不称为“id”而是“userid”这一事实有关?
【问题讨论】:
【参考方案1】:当我尝试你正在做的事情时,我得到了同样的行为。似乎由于某种原因id
不能是别名,除非它是复合键(至少在 0.9.5 中)。您可以通过以下方式解决此问题并获得相同的结果:
case class Wallet(@Column("userid") id: Int, amount: Long)
extends KeyedEntity[Int] with Optimistic
def userid = id
列注释将在数据库中查找userid
字段,而id
将改为val
。然后,您可以使用别名 userid
以保持一致性。
【讨论】:
找不到类型“列”。它在哪里定义?谢谢 可以通过导入找到注解:org.squeryl.annotations.Column
以上是关于尝试使用 Squeryl 插入时出现 ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章