Как Slick noob Я не понимаю, почему я должен указать свою модель дважды, сначала в Scala, а затем в 1.sql для создания таблиц. Это не выглядит СУХОЙ. Есть ли простой способ генерировать 1.sql (и 2..n.sql) из модели во время разработки?Легкий способ генерации 1.sql от модели?
0
A
ответ
1
Я создал свою собственную задачу SBT легко генерировать 1.sql от модели, используя генерацию кода:
в build.sbt файле:
val generate_schema = taskKey[Unit]("Schema Generator")
generate_schema <<= (fullClasspath in Runtime) map {classpath =>
val loader: ClassLoader = ClasspathUtilities.toLoader(classpath.map(_.data).map(_.getAbsoluteFile))
val schemaGenerator = loader.loadClass("misc.SchemaGenerator").newInstance().asInstanceOf[Runnable]
schemaGenerator.run
}
класс misc.SchemaGenerator:
package misc
import models.Article
import models.Category
import play.api.Logger
import slick.driver.PostgresDriver.api._
import scala.concurrent._
import ExecutionContext.Implicits.global
import scala.reflect.io.File
class SchemaGenerator extends Runnable {
def run = {
println("---------------------GENERATING SCHEMA.....")
val categories = TableQuery[Category]
val articles = TableQuery[Article]
val file = File("/home/pedro/NetBeansProjects/play-scala-angular-sample/my-blog-server/conf/evolutions/default/1.sql")
val sb = new StringBuilder("# --- !Ups \n\n")
categories.schema.create.statements.foreach(st => sb.append(st.toString + ";\n"))
sb.append("\n\n")
articles.schema.create.statements.foreach(st => sb.append(st.toString + ";\n"))
sb.append("\n\n")
sb.append("# --- !Downs")
sb.append("\n\n")
categories.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n"))
sb.append("\n\n")
articles.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n"))
// Logger.info("value: [" + sb + "] sb")
file.writeAll(sb.toString)
Logger.info("----------------------FINISHED GENERATING SCHEMA--------------------------")
}
}
Вы можете выполнить задачу с консоли активатора: generate_schema
.
Надеюсь, это поможет.
0
... ddl.create больше не поддерживается со скользкой версии 3.0. Мотивацию можно найти в нижней части следующей страницы: https://www.playframework.com/documentation/2.4.x/PlaySlickMigrationGuide Поэтому мне нужно вручную отредактировать мои схемы или использовать генерацию кода.
Я использовал slick 2.0. Я не знаю, что такое «1.sql». Я использовал $ {tableName} .ddl.create для создания таблиц. – nikiforo
DDL было ключевое слово, чтобы его искать. И он был удален в 3.0. – Hans