Squeryl: KeyedEntity.id не обновляется при вставке

1

У меня есть определение таблицы

class Transaction(
  val ...
) extends KeyedEntity[Long] {
  val id:Long = 0
}

val transaction = table[Transaction]("transactions")

on(transaction) {t =>
    declare(
        t.id is unique
        ... (other fields)
    )
}

Таблица базы данных не была создана Squeryl (я создал ее вручную), но столбец "ID" установлен в PrimaryKey и AutoIncrement.

Теперь я вставляю строку в эту таблицу:

val row = new Transaction(...)
val rowResult = transaction.insert(row)
println("Id1="+row.id+"; Id2="+rowResult.id)

Строка правильно вставлена в базу данных, и там назначается идентификатор (! = 0). Но приложение печатает "ID1 = 0; ID2 = 0" в командной строке.

Зачем? И как мне получить присвоенный идентификатор?

edit: Я также попробовал определение таблицы таким образом

class Transaction(
    val id: Long,
    ...
) extends KeyedEntity[Long]

Не было никаких различий.

Теги:
playframework-2.0
squeryl

1 ответ

0
Лучший ответ

Когда я удаляю декларацию

t.id is unique

оно работает. Поэтому проблема решена.

Это ошибка в squeryl?

  • 3
    Это не ошибка. По умолчанию любое числовое поле идентификатора установлено с автоматическим приращением. Когда вы указываете, что t.id is unique вы переопределяете поведение по умолчанию. Нет необходимости указывать, что он уникален, поскольку он является первичным ключом, но если вы захотите, вам нужно будет также включить атрибут t.id is (unique, autoIncremented) как t.id is (unique, autoIncremented)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню