ColumnNotНайдено проблемы с магией в игре Scala - PullRequest
5 голосов
/ 29 июля 2011

Я получаю "play.exceptions.JavaExecutionException: ColumnNotFound (comments.id) "в фрагменте кода после попытки перейти на MySql вместо memorydb. Поддержка Postgres от Magic почти ноль Эволюция:

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 ]

2 голосов
/ 26 августа 2011

В этом конкретном случае драйвер mysql был старым, что делало имена действительно странными. Я только что обновил драйвер и все вернулось на место.

Вы можете проверить тему в группах Google здесь: http://groups.google.com/group/play-framework/browse_thread/thread/3bd8d3ccb5a51d10/e7074ad34ac637da?lnk=gst&q=Jos%C3%A9+Leal#e7074ad34ac637da

0 голосов
/ 26 августа 2011

Не уверен, но я видел это, когда вы запрашиваете несколько таблиц с помощью Table1. , Table2. , и они ОБА имеют столбец с одинаковым именем ... например, "ID", тогда они возвращаются как

ID_A, ID_B и т. Д. ... затем остальные столбцы. Таким образом, если в вашей таблице USR также есть столбец с именем «ID», это может быть тем, с чем вы столкнулись.

Если это так, вы можете явно перечислить все столбцы из таблицы USR и НЕ включать столбец идентификатора этой таблицы ...

OR

добавить столбец к вашему запросу

выберите C.ID в качестве MyCTableID, C. , U. ...

Затем вы ЗНАЕТЕ, что у вас явно будет столбец с именем «MyCTableID» для запуска.

0 голосов
/ 29 июля 2011

Я предполагаю, что магия комментариев работает для тривиальных запросов?Вы пытались не совмещать таблицу?

Если это не удастся, у меня есть довольно хакерское решение.Вот как я использую Anorm с Postgres.Мне пришлось редактировать исходный код Anorm, чтобы искать толькои не,,Но это приводит к тому, что Anorm не может определить, какой столбец находится в JOIN.Поэтому мне пришлось прибегнуть к уникальному названию всех моих столбцов.

В качестве альтернативы, вы можете попробовать извлечь последний код play-scala из github, но я не знаю, есть ли какой-либо значительный прогресс в этой проблеме.*

...