基本上我想使用Slick并以通用的DAO模型独立方式插入并同时检索最新的实体行数据。
我之前问过这个问题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(??? = ???))
答案 0 :(得分:1)
我们所做的是拥有经典,同步,自动增量ID float[,]
的基类。对于其他情况,我们使用了其他基类,它定义了(以及其他)方法,如:
BaseDaoAutoInc
(无论这个ID到底是什么)。
因此,对于我们希望在插入后获取完整行的情况(例如,当我们有数据库生成的某些值,例如当前时间戳等)时,我们通常会这样做:
findById
以上假设您没有自动生成密钥(并且您在插入时知道它)。如果您已经生成了键,并且需要在插入后读取对象,则需要将此(tableQuery += newEntry).flatMap(_ => findById(newEntry.??))
部分添加到上面的代码中,以先获取自动生成的ID然后再获取完整行。