2014-05-19 4 views
0

Je n'arrive pas à comprendre comment faire un simple insertion dans une base de données en utilisant Slick. J'utilise le générateur de tables avec mon Oracle db et je reçois quelque chose comme ceci:Comment faire simple insert slick avec des colonnes de requête et d'option Lifted

case class SimulatonRow(id: scala.math.BigDecimal, startDate: Option[java.sql.Timestamp], endDate: Option[java.sql.Timestamp], numberOfProc: Option[scala.math.BigDecimal], code: String) 
    /** GetResult implicit for fetching SimulatonRow objects using plain SQL queries */ 
    implicit def GetResultSimulatonRow(implicit e0: GR[scala.math.BigDecimal], e1:  GR[Option[java.sql.Timestamp]], e2: GR[Option[scala.math.BigDecimal]], e3: GR[String]): GR[SimulatonRow] = GR{ 
prs => import prs._ 
SimulatonRow.tupled((<<[scala.math.BigDecimal], <<?[java.sql.Timestamp], <<?[java.sql.Timestamp], <<?[scala.math.BigDecimal], <<[String])) 
    } 
class Simulaton(tag: Tag) extends Table[SimulatonRow](tag, Some("BPRISK"), "SIMULATON") { 
def * = (id, startDate, endDate, numberOfProc, code) <> (SimulatonRow.tupled, SimulatonRow.unapply) 
/** Maps whole row to an option. Useful for outer joins. */ 
def ? = (id.?, startDate, endDate, numberOfProc, code.?).shaped.<>({r=>import r._; _1.map(_=> SimulatonRow.tupled((_1.get, _2, _3, _4, _5.get)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported.")) 

/** Database column ID PrimaryKey */ 
val id: Column[scala.math.BigDecimal] = column[scala.math.BigDecimal]("ID", O.PrimaryKey, O.AutoInc) 
/** Database column START_DATE */ 
val startDate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("START_DATE") 
/** Database column END_DATE */ 
val endDate: Column[Option[java.sql.Timestamp]] = column[Option[java.sql.Timestamp]]("END_DATE") 
/** Database column NUMBER_OF_PROC */ 
val numberOfProc: Column[Option[scala.math.BigDecimal]] = column[Option[scala.math.BigDecimal]]("NUMBER_OF_PROC") 
/** Database column CODE */ 
val code: Column[String] = column[String]("CODE") 
    } 

Puis-je ajouter l'option AutoInc à la clé primaire.

J'ai essayé des variantes de 'insert' avec TableQuery [Simulaton] .map ou InsertInvoker, mais le code ne peut pas être compilé.

Comment ça marche?

Je dois faire un 'insert' avec PK et colonnes auto-incrémentées - code startDate.

Répondre

0
// import driver specific stuff 
import MySQLDriver.simple._ 

// import generated code 
import Tables._ 

// define db connection 
val db = Database.for... 

// create a connection 
db.withSession{ implicit session => 

    // select what should be inserted into 
    TableQuery[Simulaton].map(s => (s.code,s.startDate)) 
         // insert instead or running the query 
         .insert(("some code",Some(DateTime.now))) 

} 
+0

insert de valeur de méthode surchargée avec des alternatives: [erreur] [TT] (requête: scala.slick.lifted.Query [TT, (String, Option [java.sql.Timestamp])]) (Session implicite : scala.slick.jdbc.JdbcBackend # SessionDef) Int [erreur] (valeur: (Chaîne, Option [java.sql.Timestamp])) (session implicite: scala.slick.jdbc.JdbcBackend # SessionDef) Int [ erreur] ne peut pas être appliquée à ((String, java.sql.Timestamp)) [erreur] .insert ((processId, maintenant)) [erreur]^ –

+0

Je pense que la colonne "id" doit être entretenue dans Option [] pour être ignoré dans la déclaration d'insertion, mais je ne peux pas comprendre, comment changer le modèle –

+0

Correction d'un 'Some' manquant dans le un swer. Les erreurs de type peuvent être un peu effrayantes avec Slick, quand quelque chose échoue. Vérifiez que les types et les options correspondent si vous en avez. Les requêtes de type en ligne peuvent aussi aider. – cvogt

Questions connexes