2014-02-19 6 views
25

Я посмотрел на концы земли, чтобы ответить на этот вопрос. На слайке 2.0 мало информации. Ниже мой код для моей модели Адресов, как бы мне создать метод, возвращающий идентификатор после того, как он сделал вставку?Возврат идентификатора AutoInc после вставки в Slick 2.0

package models 
import play.api.Play.current 
import play.api.db.slick.Config.driver.simple._ 
import play.api.db.slick.DB 

    object Addresses{ 
     val DB_URL:String = "jdbc:h2:mem:fls-play" 
     val DB_driver:String = "org.h2.Driver" 
     class Addresses(tag: Tag) extends Table[(String, String, String, String, String)](tag, "ADDRESSES"){ 
     def id = column[Int]("ID", O.PrimaryKey, O.AutoInc) 
     def city = column[String]("CITY") 
     def stateName = column[String]("STATE_NAME") 
     def street1 = column[String]("STREET1") 
     def street2 = column[String]("STREET2") 
     def zip = column[String]("ZIP") 

     def * = (city, stateName, street1, street2, zip) 
     } 
     val addresses = TableQuery[Addresses] 

     def create(city:String, stateName:String, street1:String, street2:String, zip:String) { 
     DB.withSession{ implicit session => 
      addresses += (city, stateName, street1, street2, zip) 
     } 
     } 
    } 

Спасибо!

+0

возможный дубликат [как я возвращаю генерацию последовательности для идентификатора с помощью Scala Slick] (http://stackoverflow.com/questions/19877185/how-do-return-an-sequence-generation-for-the-id-using-scala-slick) – joescii

+2

@barnes jd Я думаю, что ответ имеет дело с slick 1.0. –

+0

@MartinKolinek ах действительно ... Хороший улов. – joescii

ответ

38

Попробуйте

(addresses returning addresses.map(_.id)) += (city, stateName, street1, street2, zip) 

не проверял, но это показано here

+0

Большое вам спасибо, я не могу поверить, что пропустил это. –

+0

@Martin так вы ответили на вызов метода вызова? Вы не можете использовать код, чтобы каким-то образом уменьшить код? Мне не нравится, как мы должны повторять столбцы. Надеясь, что вы можете уточнить, где этот код действительно поддерживает? Это в том же месте, что и метод * =? – Blankman

+1

@Blankman, если у вас уже есть кортеж столбцов, вы должны использовать что-то вроде '(add return add.map (_. Id)) + = tuple'. Если это то, о чем вы просите. –

3

Если у вас есть поля со значениями по умолчанию, вы можете попробовать этот

addresses.map(c => (c.city, c.stateName, c.street1)) returning addresses.map(_.id) += (city, stateName, street1) 
+0

Хороший! Я искал это. благодаря – brunofitas

Смежные вопросы