【发布时间】:2015-09-05 15:04:36
【问题描述】:
我启动并运行了 play-slick 模块,并且还在使用 evolution 以便在应用程序启动期间在数据库中创建所需的表。
为了使进化工作,需要编写一个1.sql 脚本,其中包含我要创建的表定义。目前它看起来像这样:
# --- !Ups
CREATE TABLE Users (
id UUID NOT NULL,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL,
firstname varchar(255),
lastname varchar(255),
username varchar(255),
age varchar(255),
PRIMARY KEY (id)
);
# --- !Downs
DROP TABLE Users;
到目前为止一切顺利,但要让 Slick 正常工作,它还需要知道我的表的定义。所以我有一个UserDAO 对象,看起来像这样:
class UserDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
private val Users = TableQuery[UsersTable]
def all(): Future[Seq[User]] = db.run(Users.result)
def insert(user: User): Future[User] = db.run(Users += user).map { _ => user }
//Table definition
private class UsersTable(tag:Tag) extends Table[User](tag,"users"){
def id = column[UUID]("id", O.PrimaryKey)
def email = column[String]("email")
def password = column[String]("password")
def firstname = column[Option[String]]("firstname")
def lastname = column[Option[String]]("lastname")
def username = column[Option[String]]("username")
def age = column[Int]("age")
def * = (id, email,password,firstname,lastname,username,age) <> ((User.apply _).tupled, User.unapply)
}
}
我现在基本上在两个不同的地方都有相同的表定义。一次在 1.sql 脚本中,一次在 UserDAO 类中。
我真的一点都不喜欢这个设计!在两个不同的地方有相同的表定义似乎是不对的。
有没有办法从 UserDAO 类中的表定义生成进化脚本?或者是否有完全不同的方式在启动期间生成表定义(可能只使用 slick)?我真的很想只使用光滑的表定义并摆脱烦人的 SQL 脚本。
我正在使用play-2.4 和play-slick-1.0
非常感谢。
【问题讨论】:
标签: scala playframework playframework-2.0 slick slick-2.0