使用 H2 播放 Slick(2.6.x):table 未找到
Play Slick(2.6.x) with H2: table not found
To reproduce the error, please find play-slick-todos.
我按照 play-slick-sample 中的模式使用 Playframework 和 Slick 实现待办事项列表 API 端点。为了简化问题,我只实现了 index
端点。
在 sbt run
完成后,访问 localhost:9000
到达 Application
中的 index
端点。但是,它会抛出以下错误:
[error] application -
! @797hp92i6 - Internal server error, for (GET) [/] ->
play.api.http.HttpErrorHandlerExceptions$$anon: Execution exception[[JdbcSQLException: Table "todo" not found; SQL statement:
select "id", "content" from "todo" [42102-197]]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:251)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:178)
at play.core.server.AkkaHttpServer$$anonfun.applyOrElse(AkkaHttpServer.scala:363)
at play.core.server.AkkaHttpServer$$anonfun.applyOrElse(AkkaHttpServer.scala:361)
at scala.concurrent.Future.$anonfun$recoverWith(Future.scala:413)
at scala.concurrent.impl.Promise.$anonfun$transformWith(Promise.scala:37)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
Caused by: org.h2.jdbc.JdbcSQLException: Table "todo" not found; SQL statement:
select "id", "content" from "todo" [42102-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readTableOrView(Parser.java:5920)
at org.h2.command.Parser.readTableFilter(Parser.java:1430)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:2138)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2287)
at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
at org.h2.command.Parser.parseSelect(Parser.java:1919)
似乎 Slick 没有为我创建 "todo" table。
我知道如何创建 table:对于 todos,Await.result(db.run(todos.schema.create))
可以胜任。但是我不知道把它们放在哪里,我相信这应该是由 Slick and Play 完成的。
感谢任何帮助。谢谢!
versions:
play - 2.6.18
scala - 2.12.6
h2 - 1.4.197
play-slick - 3.0.1
play-slick-evolutions - 3.0.1
The diff 回答了问题。我应该添加一个进化脚本。
To reproduce the error, please find play-slick-todos.
我按照 play-slick-sample 中的模式使用 Playframework 和 Slick 实现待办事项列表 API 端点。为了简化问题,我只实现了 index
端点。
在 sbt run
完成后,访问 localhost:9000
到达 Application
中的 index
端点。但是,它会抛出以下错误:
[error] application -
! @797hp92i6 - Internal server error, for (GET) [/] ->
play.api.http.HttpErrorHandlerExceptions$$anon: Execution exception[[JdbcSQLException: Table "todo" not found; SQL statement:
select "id", "content" from "todo" [42102-197]]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:251)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:178)
at play.core.server.AkkaHttpServer$$anonfun.applyOrElse(AkkaHttpServer.scala:363)
at play.core.server.AkkaHttpServer$$anonfun.applyOrElse(AkkaHttpServer.scala:361)
at scala.concurrent.Future.$anonfun$recoverWith(Future.scala:413)
at scala.concurrent.impl.Promise.$anonfun$transformWith(Promise.scala:37)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
Caused by: org.h2.jdbc.JdbcSQLException: Table "todo" not found; SQL statement:
select "id", "content" from "todo" [42102-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readTableOrView(Parser.java:5920)
at org.h2.command.Parser.readTableFilter(Parser.java:1430)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:2138)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2287)
at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
at org.h2.command.Parser.parseSelect(Parser.java:1919)
似乎 Slick 没有为我创建 "todo" table。
我知道如何创建 table:对于 todos,Await.result(db.run(todos.schema.create))
可以胜任。但是我不知道把它们放在哪里,我相信这应该是由 Slick and Play 完成的。
感谢任何帮助。谢谢!
versions:
play - 2.6.18
scala - 2.12.6
h2 - 1.4.197
play-slick - 3.0.1
play-slick-evolutions - 3.0.1
The diff 回答了问题。我应该添加一个进化脚本。