2

我正在使用 Play Framework,在将模型添加到应用程序后出现以下错误:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PLAY_EVOLUTIONS
 org.hsqldb.jdbc.Util.sqlException(Unknown Source)

我的配置:

db.queen.driver=org.hsqldb.jdbcDriver
db.queen.url="jdbc:hsqldb:file:queen-db;shutdown=true;hsqldb.write_delay=false;"
db.queen.user=sa
db.queen.password=""

ebean.queen="models.*"

我只有一张表(Users)的进化,我也有一个模型(User)。我的申请有什么问题?

ADD我发现Users在我引入User模型后我的表没有创建

我的进化(1.sql):

# Users schema

# --- !Ups

CREATE TABLE User (
    id bigint(20) NOT NULL AUTO_INCREMENT,
    first_name varchar(255) NOT NULL,
    last_name varchar(255) NOT NULL,
    nick_name varchar(255) NOT NULL,
    PRIMARY KEY (id)
);

# --- !Downs

DROP TABLE User;

添加我已经创建了没有模型的新应用程序并出现以下错误

[info] play - database [default] connected at jdbc:hsqldb:file:queen-db;shutdown=true;hsqldb.write_delay=false;
[warn] application - play_evolutions table already existed
[error] application -

! @6emindcmh - Internal server error, for (GET) [/users] ->

play.api.UnexpectedException: Unexpected exception[SQLSyntaxErrorException: user lacks privilege or object not found: PLAY_EVOLUTIONS]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$1.apply(ApplicationProvider.scala:142) ~[play_2.10.jar:2.1.1]
at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$1.apply(ApplicationProvider.scala:106) ~[play_2.10.jar:2.1.1]
at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:106) ~[play_2.10.jar:2.1.1]
at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:104) ~[play_2.10.jar:2.1.1]
at scala.util.Either$RightProjection.flatMap(Either.scala:523) [scala-library.jar:na]
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PLAY_EVOLUTIONS
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at com.jolbox.bonecp.StatementHandle.executeQuery(StatementHandle.java:503) ~[bonecp.jar:0.7.1.RELEASE]
at play.api.db.evolutions.Evolutions$.executeQuery(Evolutions.scala:118) ~[play-jdbc_2.10.jar:2.1.1]
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PLAY_EVOLUTIONS
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source) ~[hsqldb-2.2.9.jar:2.2.9]

我的应用程序的配置:

application.langs="en"

db.default.driver=org.hsqldb.jdbcDriver
db.default.url="jdbc:hsqldb:file:queen-db;shutdown=true;hsqldb.write_delay=false;"
db.default.user=sa
db.default.password=""

ebean.default="models.*"

PS:我已经分享了我的资源:https ://github.com/skayred/play-hsqldb-test

4

1 回答 1

3

User是 HSQLDB 中的保留关键字。您可以"User"改用用户,但我建议您将表重命名为其他名称,并在Table 注释中提供表的名称,如下所示:

@Entity
@Table(name = "my_user_table")
public class User { .... }

编辑更新:

尝试应用 Evolutions 时会发生错误。由于 Evolutions 来自 SQL 文件,即使您没有模型,如果 SQL 存在,它们也会运行(Evolutions 和模型类在目的上是相关的,但 Play 认为每一个都是独立的组件)

该错误意味着无法访问数据库或您的用户没有权限。我看到您正在尝试使用与以前相同的数据库。我会做以下事情:

  • 从头开始创建一个新项目,除了play new生成的文件之外没有其他文件。
  • 创建一个新的数据库。不要重复使用前一个,。
  • 将您的新数据库详细信息添加到该新项目
  • 尝试启动应用程序。它可能在这里失败,那么您就知道您的数据库详细信息是错误的。
  • 如果可行,请将 Evolution 文件添加到您的新项目中
  • 尝试再次运行该项目。如果失败,你就会知道是 Evolution 文件出错了(语法错误)
  • 添加模型类
  • 尝试再次运行该项目。如果失败,您就知道您的模型与数据库不匹配。

按顺序执行这些步骤应该可以帮助您找到错误。

于 2013-06-27T10:01:37.293 回答