我收到了“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)
谢谢!
答案 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”的列来运行。