我已经在mySQL中定义了一个数据库模式,我希望在它上面使用ActiveRecord应用程序处理play-2。
然而,当我启动项目时,它给了我错误:
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
}
然而,它仍然给我同样的错误
无论如何,我可以绕过创建表部分吗?
非常感谢!
答案 0 :(得分:0)
您的数据库中是否已有一个user
表,其中包含不同的架构?
由于您使用的是PlaySupport
特征,我猜您正在使用Scala ActiveRecord Play2.1插件。如该项目的wiki中所述,在conf / play.plugins中添加以下设置
9999:com.github.aselab.activerecord.ActiveRecordPlugin
ActiveRecordPlugin
类在启动时初始化表。所以你不应该从你的Global onStart
答案 1 :(得分:0)
也许您自己使用MyDatabaseLibrary.create()
之类的东西?
检查出来。您可以尝试在目录中搜索.create
答案 2 :(得分: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!
}
如果数据库中不存在其中一个表,则框架将按对象中列出的顺序创建 ALL 表。
我确实尝试将不存在的记录安排到顶部,框架将创建表并且无法运行。但是,如果出现上面列出的情况,则会出错:表'user'已经声明,并且 NO 表将在数据库中创建。
将作为一个错误引发给Activerecord并查看是否有解决方案。