2013-02-20 3 views
4

У меня есть таблица с autoid для поля id. После вставки строки с аномом я хотел бы получить сгенерированный идентификатор. Есть идеи?Scala anorm получить вставленный id

SQL(
    """ 
     insert into accom (id,places,lat,lon,permaname,country,defaultLanguage) values (
     {places}, {lat}, {lon}, {permaname}, {country}, {defaultLanguage} 
    ) 
    """).on(
     'id -> id, 
     'places -> places, 
     'lat -> lat, 
     'lon -> lon, 
     'permaname -> permaname, 
     'country -> country, 
     'defaultLanguage -> defaultLanguage).executeUpdate() 
} 

ответ

7

В последней версии вам необходимо скаляр:

val newId = SQL(
     """ 
     insert into accom (places,lat,lon,permaname,country,defaultLanguage) 
     values ({places}, {lat}, {lon}, {permaname}, {country}, {defaultLanguage}) 
     """).on(
     'places -> places, 
     'lat -> lat, 
     'lon -> lon, 
     'permaname -> permaname, 
     'country -> country, 
     'defaultLanguage -> defaultLanguage).executeInsert(scalar[Long].single) 
+0

Это правильный ответ. Без использования скалярного параметра я видел странные ошибки несоответствия типа столбца. – caprica

2

Использование executeInsert вместо executeUpdate, а возвращаемое значение является идентификатором.

+2

Они должны действительно документ, верно? –

2

Использовать метод executeInsert вместо executeUpdate; он возвращает Option[T], где T - тип первичного ключа.

Возможно, вы захотите взглянуть на How to Retrieve the Primary Key When Saving a New Object in Anorm, в котором также показано, как сформулировать ваш оператор INSERT без указания идентификатора - который вы хотите сгенерировать.