尝试使用 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的主要内容,如果未能解决你的问题,请参考以下文章

尝试插入长数组时出现 Postgresql 错误

尝试使用触发器以将行插入另一个表时出现语法错误

尝试从 eloquent 的查询中插入值时出现问题

尝试将字符串插入 SQL Server 时出现问题

尝试在 SQLITE DATABASE 中插入 API DATA 时出现问题

当我尝试通过存储过程插入空值时出现 SqlException