Ho ottenuto il modulo play-slick attivo e sto usando anche evolution per creare le tabelle richieste nel database durante l'avvio dell'applicazione.Creazione tabella in gioco 2.4 con play-slick 1.0
Per l'evoluzione al lavoro è necessario scrivere uno script 1.sql
che contiene le definizioni di tabella che voglio creare. Al momento sembra che questo:
# --- !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;
Fin qui tutto bene, ma per Slick per funzionare correttamente anche bisogno di conoscere la definizione del mio tavolo. Così ho un oggetto UserDAO
che assomiglia a questo:
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)
}
}
ho praticamente hanno lo stesso definizione della tabella in due posti differenti ora. Una volta nello script 1.sql
e una volta nella classe UserDAO.
Davvero non mi piace affatto questo disegno! Non avere le stesse definizioni di tabella in due posti diversi non è giusto.
C'è un modo per generare gli script di evoluzione dalle definizioni di tabella all'interno delle classi UserDAO? O c'è un modo completamente diverso di generare le definizioni delle tabelle durante l'avvio (forse solo usando slick)? Mi piacerebbe davvero usare solo la definizione della tabella slick e sbarazzarsi dei fastidiosi script SQL.
Sto usando play-2.4
e play-slick-1.0
Grazie mille.
Esattamente dove hai messo il 'TableQuery [UsersTable] .schema.create' chiamano? – evermean
Molto importante è l'ambito di seguito riportato: val profile = slick.driver.H2Driver import profile.api._ – bjfletcher
Nessuna nuova riga con commenti, ma guarda la parte inferiore della risposta aggiornata. – bjfletcher