J'ai déjà un certain projet simple avec un script de migration:Comment configurer Play! Framework pour travailler avec ScalaQuery et H2?
# --- !Ups
create table user (
name varchar(255) not null primary key,
password varchar(255) not null
);
insert into user values ('demo', 'demo');
insert into user values ('kuki', 'pass');
# --- !Downs
drop table if exists user;
base de données que j'utilise en est H2 en mémoire:
db.default.driver=org.h2.Driver
db.default.url=jdbc:h2:mem:play
Je veux évidemment interroger des données. Lorsque j'utilise anorm tout fonctionne correctement:
case class User(name: String, password: String)
object User {
val simple = {
get[String]("user.name") ~/
get[String]("user.password") ^^ {
case name~password => User(name, password)
}
}
def findByName(name: String): Option[User] = {
DB.withConnection { implicit connection =>
SQL("select * from user where name = {name}").on(
'name -> name
).as(User.simple ?)
}
}
}
malchanceux lorsque je tente de faire la même chose avec ScalaQuery:
object User extends Table[(String, String)]("user") {
lazy val database = Database.forDataSource(DB.getDataSource())
def name = column[String]("name", O PrimaryKey, O NotNull)
def password = column[String]("password", O NotNull)
def * = name ~ password
def findByName(name: String) = database withSession {
implicit db: Session =>
(for (u <- this if u.name === name) yield u.name ~ u.password).list
}
}
Je reçois toujours la même erreur:
[JdbcSQLException: Tablela "user" nie istnieje Table "user" not found;
SQL statement: SELECT "t1"."name","t1"."password" FROM "user" "t1" WHERE ("t1"."name"='input_name') [42102-158]]
Y at-il quelque chose que je fais mal? Je pense que je suis strictement guide à partir de là: https://github.com/playframework/Play20/wiki/ScalaDatabase
--------------------- EDIT ------------- ----------
Apparemment, il y a une sorte d'incompatibilité entre les évolutions de Play et ScalaQuery. Lorsque j'ai créé table à l'aide:
database withSession {
implicit db: Session =>
User.ddl.create
User.insert("demo", "demo")
}
tout semble bien fonctionner. Peut-être plus tard, je vais créer une base de données MySQL simple et vérifier ce qui se passe réellement à l'intérieur.
--------------------- EDIT 2 ----------------------- Donc, je sais plus ou moins ce qui se passe (mais je ne sais pas pourquoi). Lorsque je crée une structure db avec des évolutions, le nom de la table et les noms des colonnes sont écrits avec toutes les majuscules.
Et comme je suis sur Linux, c'est important. Si je devais changer les noms de tables et de colonnes dans le code, alors tout fonctionnerait.
Je suis seulement curieux de savoir s'il s'agit d'un bug ou si c'est un moyen d'imposer un cas approprié sur les migrations?
où mettez-vous votre script de migration? Je suppose que c'est un script d'évolution, n'est-ce pas? – mandubian
Oui, c'est. Le chemin du fichier est db/evolutions/default/1.sql –
Ce n'est pas une bonne idée de nommer un utilisateur de table. Trop de mise en œuvre dbs sql devient confus. – flurdy