播放框架:用户缺少权限或找不到对象:PLAY_EVOLUTIONS

Posted

技术标签:

【中文标题】播放框架:用户缺少权限或找不到对象:PLAY_EVOLUTIONS【英文标题】:Play framework: user lacks privilege or object not found: PLAY_EVOLUTIONS 【发布时间】:2013-06-26 16:54:20 【问题描述】:

我使用的是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)。我的申请有什么问题?

添加我发现我的表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

【问题讨论】:

请将您的进化文件内容添加到问题中 【参考方案1】:

User 是 HSQLDB 中的 reserved keyword。您可以使用 "User" 而不是用户,但我建议您将表重命名为其他名称,并在 Table 注释中提供表的名称,如下所示:

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

编辑更新:

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

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

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

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

【讨论】:

那么模型呢?我也重命名了吗? @skayred 不,这就是 @Table 注释的用途。 我创建了没有模型的新应用程序并出现新错误 - 请参阅编辑 所以当我尝试创建进化时会发生此错误,即使我尝试使用其他名称也是如此。怎么了? @skayred 如果它们发生在创建进化时,如果连接细节都正确,那么语法可能是错误的。尝试在文件中添加基本命令,只需一个选择到系统表。如果失败,则可能是连接详细信息,否则是您当前的语法。

以上是关于播放框架:用户缺少权限或找不到对象:PLAY_EVOLUTIONS的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致错误“用户缺少权限或找不到对象:FieldName”

用户缺少权限或找不到对象:XXXX

HSQLDB SqlTool 抛出用户缺少权限或找不到对象

HSQLDB:用户缺少权限或找不到对象错误

HSQLDB:用户缺少权限或找不到对象:USERS

用户缺少权限或找不到对象