gpt4 book ai didi

scala - 参数值 [1234567890] 与预期类型不匹配 [scala.Option (n/a)]

转载 作者:行者123 更新时间:2023-12-04 03:42:07 25 4
gpt4 key购买 nike

所以我想在 MYSQL 表中的 3 列中搜索一个值,然后像这样编写 JPA 查询:SELECT * FROM table WHERE 123 IN(col1, col2, col3);
所以问题是 col2 和 col3 可以为空,它们可能有空值,所以这些列的类型是实体类中的 Option[String]

所以我在 JpaRepository 中尝试了类似的东西:

@Repository
trait ContactRepo extends JpaRepository[Contact, Long] {

def findFirstByCol1OrCol2OrCol3(c1: String, c2: scala.Option[String], c3: scala.Option[String]): Contact
}

在调用时:

val optionData: scala.Option[String] = scala.Option("1234567890")
val someData: scala.Some[String] = scala.Some("12345678980")
val simpleStringData: String = "1234567890"
val contact = contactRepo.findFirstByCol1OrCol2OrCol3(simpleStringData, optionData, optionData)

我尝试了所有变量(optionData、someData 和 simpleStringData),但我一直收到此错误:

Parameter value [1234567890] did not match expected type [scala.Option (n/a)]

我也试过 OnIsNull 但还是不行我不知道我错过了什么我认为这是一些我不明白的小错误

问题:我如何为 SELECT * FROM table WHERE 123 IN(col1, col2, col3); 编写 JPA 查询注意:col2和col3的类型是scala.Option[String]

最佳答案

我知道这是一个老问题,但我今天遇到了同样的问题,我通过检查函数所需的确切值解决了这个问题。当您使用选项类型创建 JPA 查询时,实体类中的查询映射变量也被定义为选项,因此在将值传递给查询方法时,您需要像这样传递它:选项[选项[String]]所以在你的方法中它应该是:

trait ContactRepo extends JpaRepository[Contact, Long] {

def findFirstByCol1OrCol2OrCol3(c1: String, c2: Option[Option[String]], c3: scala.Option[String]): Contact
}

在调用时:

val optionData = Some(Some("1234567890"))
val someData= Some(Some("1234567890"))
val simpleStringData: String = "1234567890"
val contact = contactRepo.findFirstByCol1OrCol2OrCol3(simpleStringData, optionData, someData)

关于scala - 参数值 [1234567890] 与预期类型不匹配 [scala.Option (n/a)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65841214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com