Я установил этот код, чтобы извлечь строку из таблицы с помощью Anorm, но у меня есть ошибка. Вот код:Выберите из СУРБД с помощью Anorm и Play 2.2 для Scala
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)]
Если удалить столбец «ID» из инструкции SQL, и я удалить его ссылку из кода, чтобы получить только столбец «описание», все работает отлично.
Что не так в столбце 'id'? Почему нет совпадения, если это столбец java.lang.Integer? Может ли быть класс, специфичный для базовых ключей БД?
проверьте, используете ли вы правильную базу данных. Вы также можете сначала вызвать head(), а затем использовать карту. Я сомневаюсь, что это заставит его работать, но вы должны это сделать, а не собирать. Я никогда не использовал Anorm, но мне кажется правильным: p –
Спасибо за отзыв, но это не помогло. О БД я подключен к единственной, которую я настроил. ВСТАВКИ И ОБНОВЛЕНИЯ работают, как ожидалось. – Max
Кажется, что идентификатор попадает в строку ... –