我在scala中有两个存储库。在一个回购中,我定义了两种方法。这里从一个方法我需要调用另一个方法,代码工作在另一个存储库中定义。我被困在调用方法。我不确定错误是由于返回类型还是其他一些代码逻辑。所以,我需要帮助,因为我遇到了这个问题。
在onerepo.scala =>
override def getAll(implicit loginName: String): Future[Seq[HierarchyEntryBillingRoleCheck]] = {
doQueryIgnoreRowErrors(allQuery, "loginName" -> loginName)
val output = methodtocallnextquery()
doQueryIgnoreRowErrors(methodtocallnextquery) // getting error here as cannot resolve with such signature
}
def methodtocallnextquery() = {
if(map2Object.roleName != "" && map2Object.PersonID.isEmpty) {
logger.error("user not autorised")
} else {
billingMonthCheckRepository.getrepo()
}
在第二次回购中,我有=>
override val allQuery = s"""select * from table1"""
def getrepo(): Future[Seq[HierarchyEntryBilling]] = {
doQueryIgnoreRowErrors(allQuery)
}
// doquery定义为:=>
protected def doQueryIgnoreRowErrors(query: String, args: NamedParameter*)
= { logger.debug(s"SQL: $query, args: $args")
TimedFuture(actualityTimeout) {
queryHandler.doQuery(query, args: _*) map { list =>
// ignore mapping errors of specific rows
list.flatten
}
} flatMap {
case scala.util.Success(s) => Future.successful(s)
case Failure(ex) if ex.isInstanceOf[SQLException] &&
ex.getMessage == "The executeQuery method must return a result set." =>
Future.successful(Nil)
case Failure(fail) =>
Future.failed(fail)
答案 0 :(得分:1)
您怀疑methodtocallnextquery
函数的返回类型并不是您认为的。 logger.error
可能会返回Unit
(我在这里猜测,但这似乎很可能)。如果是,则该方法的返回类型为Any
,这可能与doQueryIgnoreRowErrors
所需的参数类型不匹配。