2012-01-28 2 views
1

현재 저는 연극의 yabe 자습서의 스칼라 버전을 읽고 있습니다. yabe는 또 다른 블로그 엔진을 의미하며 자연스럽게 자습서 데이터의 어느 시점에 저장해야합니다. 첫 번째 SQL 진화는 다음과 같습니다.sql 열이 "사라집니다"- 프레임 워크 재생

# Users schema 

# ---!Ups 

CREATE TABLE User(
id bigint(20) NOT NULL AUTO_INCREMENT, 
email varchar(255) NOT NULL, 
password varchar(255) NOT NULL, 
fullname varchar(255) NOT NULL, 
isAdmin boolean NOT NULL, 
PRIMARY KEY (id) 
); 

# --- !Downs 

DROP TABLE User; 

게시물 및 주석 테이블이 추가 된 후. 스칼라 측면에서 각 데이터베이스 항목은 사례 클래스에 매핑 될 수 있습니다. 그 동반 대상은 특성 마법을 확장하고 다양한 도우미 기능을 구현합니다. 문제는 Post 클래스의 companion 객체에서이 코드로 인해 발생합니다. 당신은 단지 SQL 쿼리 볼 필요가 :

def allWithAuthor:List[(Post,User)] = 
    SQL(
     """ 
      select * from Post p 
      join User u on p.author_id = u.id 
      order by p.postedAt desc 
     """ 
    ).as(Post ~< User ^^ flatten *) 

가 나는 코드가 무엇을하는지 이해하지만 난 내 자신에 가지고 올 수 없었을 것이라는 점을 인정한다.

이 코드를 테스트하기 위해 다음 테스트가 실행됩니다

it should "create a Post" in { 

    User.create(User(Id(1), "[email protected]", "secret", "Bob", false))  
    val users= User.find("id={id}").on("id"->1).as(User*) 
} 

이 시험은 잘 완료됩니다. 스칼라의 구문은 약간 복잡해하지만 당신은 ID를 가진 사용자에 대한 테스트 쿼리 문제는이 시험에 표시 1. 와 동일한 것을 분명히 볼 수 있습니다 :

: 테스트는 오류 메시지와 함께 실패

it should "retrieve Posts with author" in { 

    User.create(User(Id(1), "[email protected]", "secret", "Bob", false)) 
    Post.create(Post(NotAssigned, "My 1st post", "Hello world", new Date, 1)) 

    val posts = Post.allWithAuthor 

    posts.length should be (1) 

    val (post,author) = posts.head 

    post.title should be ("My 1st post") 
    author.fullname should be ("Bob") 
} 

/test/Tests.scala에서

ColumnNotFound (User.id)는 라인 41 : 브로 포스트 = Post.allWithAuthor

어떻게 열 ID 그렇게 사라질 수 있을까? SQL 또는 scala 코드에서 아무 것도 변경하지 않았습니다. 테스트를 바꾸는 것만으로 오류를 "전환"합니다. 이 스칼라/SQL 코드

val users= User.find("id={id}").on("id"->1).as(User*) 

는 않지만 어떻게 든이 SQL 코드

  select * from Post p 
      join User u on p.author_id = u.id 
      order by p.postedAt desc 

는 ID를 찾을 수 없습니다.

무엇이 잘못되었는지 설명 할 수 있습니까? 나는이 질문을 읽은

: 다음은 튜토리얼 http://scala.playframework.org/documentation/scala-0.9.1/guide1

UPDATE에 대한 링크의 ColumnNotFound problem with Magic in play scala

및 코멘트 다음 쿼리를 편집했다. SQL 자체는 변경되지 않았지만 모두 한 줄로 붙여 넣었습니다.

def allWithAuthor:List[(Post,User)] = 
    SQL(
     """select * from Post p join User u on p.author_id = u.id order by p.postedAt desc""" 
    ).as(Post ~< User ^^ flatten *) 

이제 기적이되었습니다. 이제 열이 발견되었습니다. 쿼리가 한 줄보다 길면 이상한 ColumnNotFoundError로 불만이 있지만 oneliner가 있으면 문제가 없습니다.

어떻게 이런 일이 발생할 수 있습니까?

답변

1

파일이 Windows 인코딩으로 인코딩 된 것 같습니다. 창 인코딩이 있고 SQL에 줄 바꿈이 포함되어 있으면 이런 종류의 문제가 있습니다.

UTF-8로 인코딩 된 파일로 시도하십시오.