5

在尝试迁移到 MySql 而不是 memorydb 后,我在一段代码中收到“play.exceptions.JavaExecutionException: ColumnNotFound(comments.id)”。Magic 对 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)

谢谢!

4

3 回答 3

2

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

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

于 2011-08-26T07:40:05.727 回答
0

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

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

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

或者

在查询中添加一列

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

然后,您知道您将明确地拥有一个名为“MyCTableID”的列来运行。

于 2011-08-26T13:49:34.230 回答
0

我认为评论魔术适用于琐碎的查询?您是否尝试过不给表格起别名?

如果失败了,我有一个相当老套的解决方案。这就是我在 Postgres 中使用 Anorm 的方式。我必须编辑 Anorm 源代码以仅查找 <column name> 而不是 <table name>.<column name>。但这带来了一个问题,即 Anorm 无法识别 JOIN 中的哪一列。所以我不得不求助于唯一地命名我的所有列。

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

于 2011-07-29T10:33:12.930 回答