为了使用 Anorm 从表中检索一行,我写下了这段代码,但出现了错误。这是代码:
case class UserInquiry(
id:Long, description:String
)
object UserInquiry {
val byIdStmt = """
SELECT id, description FROM user_inquiry WHERE id = {id}
"""
def findById(id: Long) = {
DB.withConnection { implicit conn =>
SQL(byIdStmt).on("id" -> id).apply().collect {
case Row(Some(id:Integer), Some(description:String)) =>
new UserInquiry(id.toLong, description)
}.head
}
}
}
// This gives me an error
val id = UserInquiry.findById(7)
这是错误:
[MatchError: Row('ColumnName(user_inquiry.id,Some(id))':4 as java.lang.Integer,
'ColumnName(user_inquiry.description,Some(description))':My search as java.lang.String)
(of class anorm.SqlRow)]
如果我从 SQL 语句中删除“id”列,并从代码中删除它的引用,以便只获取名为“description”的列,那么一切正常。
“id”列有什么问题?如果它是 java.lang.Integer 列,为什么不匹配?是否有特定于 DB 'Primary Keys' 的类?