ColumnNotFound问题与Magic在播放scala

时间:2011-07-29 07:34:22

标签: java mysql scala playframework anorm

我收到了“play.exceptions.JavaExecutionException: ColumnNotFound(comments.id)“在尝试之后的一段代码中 迁移到MySql而不是memorydb。魔术的Postgres支持是 几乎为空。 演变:

create table comments ( 
    id bigint(20) NOT NULL AUTO_INCREMENT, 
    source varchar(255) NOT NULL, 
    target varchar(255) NOT NULL, 
    content text NOT NULL, 
    date bigint NOT NULL, 
    PRIMARY KEY (id) 
); 

模特:

case class comments(id: Pk[Long], source: String, target: String, 
content: String, date: Long) { 
  override def toString = "|%s| |%s|, |%s|, |%s|".format(id.toString, 
source, target, content) 
  lazy val formattedDate = new SimpleDateFormat("dd.MM.yyyy HH:mm") 
format date 
} 

object comments extends Magic[comments] 

这段代码:

def loadComments(username: String) = SQL("""select c.*, u.* from 
comments c, usr u where c.source = u.ccall and c.target = {ccall} 
order by c.date desc""").on("ccall" -> username).as(comments ~< usr *) 

任何人都可以给我一些指示吗?我真的坚持这个..这是堆栈跟踪:

play.exceptions.JavaExecutionException: ColumnNotFound(comments.id)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:228)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.RuntimeException: ColumnNotFound(comments.id)
    at scala.Predef$.error(Predef.scala:58)
    at play.db.anorm.Sql$.as(Anorm.scala:984)
    at play.db.anorm.Sql$class.as(Anorm.scala:919)
    at play.db.anorm.SimpleSql.as(Anorm.scala:829)
    at controllers.Profile$.loadacomments(Profile.scala:21)
    at controllers.Profile$.loadacommentsWithLikes(Profile.scala:46)
    at controllers.Profile$.comment(Profile.scala:91)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:493)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158)

谢谢!

3 个答案:

答案 0 :(得分:2)

在这个特定情况下,mysql驱动程序是一个旧的驱动程序,使名称看起来很奇怪。我刚刚更新了驱动程序,一切都回来了。

您可以在此处查看Google群组中的主题:http://groups.google.com/group/play-framework/browse_thread/thread/3bd8d3ccb5a51d10/e7074ad34ac637da?lnk=gst&q=Jos%C3%A9+Leal#e7074ad34ac637da

答案 1 :(得分:0)

我认为评论魔法适用于琐碎的查询?您是否尝试过不对表格进行别名处理?

如果失败了,我会有一个相当狡猾的解决方案。这就是我在Postgres上使用Anorm的方法。我不得不编辑Anorm源代码以查找&lt;列名&gt;而不是&lt; table name&gt;。&lt; column name&gt;。但是这带来了一个问题,即Anorm无法识别JOIN中哪一列是哪一列。所以我不得不求助于唯一地命名我的所有列。

或者,您可以尝试从github中提取最新的play-scala代码,但我不知道这个问题是否有任何重大进展。

答案 2 :(得分:0)

不确定,但是当我使用Table1查询多个表时,我已经看到了它。,Table2。,并且他们同时拥有一个同名的列...例如“ID” ,然后他们返回

ID_A,ID_B等......然后是其他列。因此,如果你的USR表也有一个名为“ID”的列,那么这可能是你遇到的。

如果是这样,您可以明确列出USR表中的所有列,而不包括该表的ID列...

OR

在查询中添加一列

选择C.ID作为MyCTableID,C。,U。 ...

然后,您知道您将明确地使用名为“MyCTableID”的列来运行。