2013-10-12 5 views
0

Anorm을 사용하여 테이블에서 행을 검색하기 위해이 코드를 입력했으나 오류가 발생했습니다. 여기Scala 용 Anorm and Play 2.2를 사용하는 RDBMS에서 선택

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'열을 제거하고 전화에만 열을 얻기 위해 나는 코드에서 해당 참조를 제거하는 경우 '설명'은 모든 것이 잘 작동합니다.

'id'열의 문제점은 무엇입니까? java.lang.Integer 열이면 일치하는 이유가 무엇입니까? 어쩌면 DB 'Primary Keys'와 관련된 클래스가 있습니까?

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

:로 변경할 수

은 'ID'A 열에 PK,

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

는이 다음 코드 줄 것을 :

+0

올바른 데이터베이스를 사용하고 있는지 확인하십시오. head()를 먼저 호출 한 다음 map을 사용할 수도 있습니다. 나는 그것이 그것이 작동하게 할 것 인 것을 의심한다. 그러나 당신은 수집하는 대신 그것을해야한다. 나는 Anorm을 한번도 사용한 적이 없지만 그렇게 할 수있는 것처럼 보입니다. p –

+0

팁 주셔서 감사합니다. 그러나 작동하지 않았습니다. DB에 관해서, 내가 구성한 유일한 데이터베이스에 연결되어 있습니다. INSERT 및 UPDATES는 예상대로 작동합니다. – Max

+0

ID가 문자열에 매핑되는 것 같습니다 ... –

답변

0

좋아, 내가 잘못 무엇 얻었다 이는 PK 열이 NULL 일 수 없기 때문에 DB에서 검색 한 값을 캡슐화하기 위해 Option [T] 개체를 사용할 것으로 예상되지 않습니다.