最近在用spring webflux使用响应式数据库驱动r2dbc的时候发现findById的sql是limit 2。看了一下代码如下
public <T> Mono<T> selectOne(Query query, Class<T> entityClass) throws DataAccessException {
return doSelect(query.isLimited() ? query : query.limit(2), entityClass, getTableName(entityClass), entityClass,
RowsFetchSpec::one);
}
后面查到是用于唯一值检测:
org.springframework.dao.IncorrectResultSizeDataAccessException: Query [SELECT t_product_factory_1.* FROM t_product_factory_1 WHERE t_product_factory_1.id = ? LIMIT 2] returned non unique result.
RowsFetchSpec::one限制了只有一个返回多个返回就会报错:
@Override
public Mono<T> one() {
return all().singleOrEmpty()
.onErrorMap(IndexOutOfBoundsException.class, ex -> {
String message = String.format("Query [%s] returned non unique result.", this.resultFunction.getSql());
return new IncorrectResultSizeDataAccessException(message, 1);
});
}