2013-10-12 2 views
0

Я установил этот код, чтобы извлечь строку из таблицы с помощью 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? Может ли быть класс, специфичный для базовых ключей БД?

+0

проверьте, используете ли вы правильную базу данных. Вы также можете сначала вызвать head(), а затем использовать карту. Я сомневаюсь, что это заставит его работать, но вы должны это сделать, а не собирать. Я никогда не использовал Anorm, но мне кажется правильным: p –

+0

Спасибо за отзыв, но это не помогло. О БД я подключен к единственной, которую я настроил. ВСТАВКИ И ОБНОВЛЕНИЯ работают, как ожидалось. – Max

+0

Кажется, что идентификатор попадает в строку ... –

ответ

0

Хорошо, я получил то, что было не так:

быть столбец 'Идентификатор' рК, следующая строка кода

case Row(Some(id:Integer), Some(description:String)) 

должен быть изменен на:

case Row(id:Integer, Some(description:String)) 

Это потому, что столбец PK не может быть NULL, тогда ожидается, что он не будет использовать объект Option [T] для инкапсуляции значения, полученного из БД.