2012-01-28 86 views
1

我目前正在閱讀play的yabe教程的scala版本。 yabe代表了另一個博客引擎,當然在教程中某些時候需要存儲數據。第一個sql演變是這樣的:sql column「消失」 - 玩框架

# 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; 

之後,添加了帖子和評論的表。在scala一側,每個數據庫條目都可以映射到一個案例類。它的伴侶對象擴展了魔術特質並實現了各種輔助功能。該問題是由來自Post類的伴隨對象的此代碼引起的。你只需要看看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*) 
} 

這個測試完成就好了。 Scala的語法增加了一些複雜性,但可以清楚地看到,對於具有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") 
} 

測試失敗,出現錯誤消息:

ColumnNotFound(User.id)在/test/Tests.scala 41行:VAL帖= Post.allWithAuthor

如何色譜柱內徑消失那樣?我沒有更改sql或scala代碼中的任何內容。只需交換測試,就可以「關閉」錯誤。不知怎的,這SQL代碼

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

沒有找到ID,而這斯卡拉/ SQL代碼

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

一樣。

你能解釋一下哪裏出了問題? 這裏的鏈接教程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進行投訴,但是使用一個上劃線就可以了。

這種情況怎麼會發生?

回答

1

我想你的文件是用windows編碼編碼的。如果你有Windows編碼,並且你的sql包含換行符,就有這種問題。

嘗試使用UTF-8編碼文件