我已经在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
} 但是,它仍然会给我同样的错误
这是不是我可以绕过create table部分?
非常感谢!
发布于 2013-06-13 09:18:05
您的数据库中是否已经有一个具有不同模式的user表?
由于您使用的是Scala,所以我猜您使用的是PlaySupport ActiveRecord Play2.1插件。正如该项目的wiki中所述,在conf/play.plugins中添加以下设置
9999:com.github.aselab.activerecord.ActiveRecordPluginActiveRecordPlugin类在启动时初始化表。因此,您不应该在Global onStart中执行此操作
发布于 2013-06-13 13:31:14
也许你自己也在使用像MyDatabaseLibrary.create()这样的东西?
看看这个。您可以尝试在目录中搜索.create的实例
发布于 2013-06-14 06:14:36
我通过在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‘已声明,并且不会在数据库中创建任何表。
会作为一个bug抛给Activerecord,看看有没有解决方案。
https://stackoverflow.com/questions/17075648
复制相似问题