У меня есть определение таблицы
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]
Не было никаких различий.
Когда я удаляю декларацию
t.id is unique
оно работает. Поэтому проблема решена.
Это ошибка в squeryl?
t.id is unique
вы переопределяете поведение по умолчанию. Нет необходимости указывать, что он уникален, поскольку он является первичным ключом, но если вы захотите, вам нужно будет также включить атрибутt.id is (unique, autoIncremented)
какt.id is (unique, autoIncremented)