В основном я хотел бы использовать Slick и в универсальном независимом от DAO пути, вставлять и в то же время извлекать самые последние данные строки сущности.Slick 3.1.x CRUD: как извлечь всю обновленную строку?
Я ранее задал этот вопрос Slick 3.1.x CRUD: how to extract the inserted row id? и в конце концов сумел заставить его работать. Однако такой подход не является оптимальным по следующим причинам:
- Он предполагает, что каждая модель имеет атрибут
id
и это не всегда может быть дело. Это работает только для сильных объектов, а не для, например, один-ко-многим слабым объектам и, конечно, нужно называтьid
всегда, посколькуid
является неприятностью. - Существуют потенциально другие поля, которые заполняются при вставке, например. возможное
modified
метка времени или любых модификации триггера пользовательских баз данных, а не толькоid
илиmodified
Поэтому я хотел бы, чтобы найти решение, которое вставляет новый объект и в то же время извлекает из всего нового Entity строки и а не только id
. Так что вместо того, чтобы делать:
val insertQuery = User returning User.map(_.id) into ((row, id) => row.copy(id = id))
Есть что-то еще, как:
val insertQuery = User returning User.map(_) into ((row, ???) => row.copy(??? = ???))
'Пользователь, возвращающий User.map (_. Id)', может использоваться только в том случае, если id является первичным ключом и автоматически увеличивающим ключ. Также вы не можете вернуть каждый столбец. Вы получите исключение во время выполнения, если попробуете вернуть любое дополнительное увеличение числа экземпляров, первичный ключ ... Чтобы сделать то, о чем вы думаете. Вставить запрос не в место –
Как этот прецедент покрыт Slick? например если у меня нет таблицы, содержащей идентификатор или, что то ли, идентификатор auto-increment? –
@GiovanniAzua после успешной вставки ... вы можете запросить введенные значения. – pamu