播放框架:用户缺少权限或找不到对象: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的主要内容,如果未能解决你的问题,请参考以下文章