5

memorydb ではなく MySql に移行しようとした後、コードの一部に「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

コメントの魔法は些細なクエリでも機能すると思いますか? テーブルにエイリアスを付けないようにしましたか?

それが失敗した場合、かなりハックな解決策があります。これが、Postgres で Anorm を使用する方法です。Anorm ソース コードを編集して、<テーブル名>.<列名> ではなく <列名> だけを探す必要がありました。しかし、それは Anorm がどの列が JOIN のどの列であるかを識別できないという問題をもたらします。そのため、すべての列に一意の名前を付ける必要がありました。

別の方法として、最新の play-scala コードを github から取得することもできますが、この問題に関して大きな進展があるかどうかはわかりません。

于 2011-07-29T10:33:12.930 に答える
0

よくわかりませんが、Table1 で複数のテーブルをクエリすると、どこにあるのかわかりました。、表 2。、そして両方に同じ名前の列があります...「ID」など、次のように返されます

ID_A、ID_B など... 他の列。したがって、USR テーブルに「ID」という列もある場合、これが問題になる可能性があります。

その場合は、USR テーブルのすべての列を明示的にリストし、そのテーブルの ID 列を含めないようにすることができます...

また

クエリに列を追加する

C.ID を MyCTableID、C. 、U. ...として選択します。

次に、実行する「MyCTableID」という列が明示的にあることがわかります。

于 2011-08-26T13:49:34.230 に答える