0

我已经在 mySQL 中定义了一个数据库模式,我想在 play-2 上使用 ActiveRecord 应用程序。

但是,当我启动项目时,它给了我错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'user' already exists
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'user' already exists
and it is triggered by 
 org.squeryl.Schema.create(Schema.scala:181)
 models.Tables$.initialize(Tables.scala:7)

这就是它在我的 Tables.scala 中的样子

object Tables extends ActiveRecordTables with PlaySupport {
    val users = table[User]
}

我的 User.scala 是:

case class User( 
    override val id: Long,  
    @Length(max=50) login: String
) extends ActiveRecord {
    lazy val role = belongsTo[Role]
}
object User extends ActiveRecordCompanion[User]

我试图在我的 global.scala 中跳过这个

override def onStart(app: Application) {
    //Tables.initialize
} 

但是,它仍然给我同样的错误

无论如何我可以绕过创建表部分吗?

非常感谢!

4

3 回答 3

0

也许你使用像MyDatabaseLibrary.create()你自己的东西?

一探究竟。您可以尝试在目录中搜索出现的.create

于 2013-06-13T05:31:14.373 回答
0

我通过注释掉 Tables.scala 中的一些表模式来解决问题。我在 Table 对象中声明了多个表,其中一个在数据库中不存在,例如:

object Tables extends ActiveRecordTables with PlaySupport {
  val users = Table[User]
  val role = Table[Role]
  val group = Table[Group] //not exist which cause the error!
}

如果数据库中不存在其中一张表,框架将按照对象中列出的顺序创建所有表。
我确实尝试将不存在的记录安排到顶部,框架会创建表并且无法运行。但是,如果出现上面列出的情况,则会出现错误:表 'user' 已经声明,并且不会在数据库中创建表

将作为 Activerecord 的错误提出,看看是否有解决方案。

于 2013-06-13T22:14:36.370 回答
0

您的数据库中是否已经有一个user具有不同模式的表?

由于您使用的是PlaySupporttrait,我猜您使用的是 Scala ActiveRecord Play2.1 插件。如该项目的 wiki 中所述,在 conf/play.plugins 中添加以下设置

9999:com.github.aselab.activerecord.ActiveRecordPlugin

该类ActiveRecordPlugin在启动时初始化表。所以你不应该从你的Global onStart

于 2013-06-13T01:18:05.140 回答