Slick 3.1.x CRUD:如何提取整个最新的插入行?

Slick 3.1.x CRUD: how to extract the entire up-to-date inserted row?

基本上我想使用 Slick 并以通用的 DAO 模型独立方式插入并同时检索最新的实体行数据。

我之前问过这个问题 ,最后成功解决了这个问题。但是,由于以下原因,该方法并不是最佳方法:

因此,我想找到一个解决方案来插入新实体,同时取出整个新实体行,而不仅仅是 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(??? = ???))

我们所做的是为 classic、syntetic、autoincrement ID BaseDaoAutoInc 提供一个基础 class。对于其他情况,我们使用其他基 class 定义(除其他外)如下方法: findById(无论这个 ID 实际是什么)。

因此,对于我们希望在插入后获取整行的情况(例如,当我们有一些由数据库生成的值(例如当前时间戳等)时),我们通常会这样做:

(tableQuery += newEntry).flatMap(_ => findById(newEntry.??))

以上假定您没有自动生成的密钥(并且您在插入时知道)。如果您已经生成密钥并且需要在插入后读取对象,那么您需要将此 returning 部分添加到上面的代码中以首先获取自动生成的 ID,然后再获取整行。