使用Anorm 2.4从选择查询中解析多个ResultSet

时间:2015-12-24 02:02:10

标签: postgresql scala playframework anorm

我继续玩Play,Scala& amp; Anorm,我遇到了以下问题:

我的一个存储库类包含一个逻辑,用于从用户的DB中获取电子邮件列表,如下所示:

val sql =
      """
        |select * from user_email where user_id = {user_id}
        |;--
      """.stripMargin

    SQL(sql).on(
      'user_id -> user.id
    ).as(UserEmail.simpleParser *)

虽然解析器是这样的:

val simpleParser: RowParser[UserEmail] = (
      SqlParser.get[Muid](qualifiedColumnNameOf("", Identifiable.Column.Id)) ~
      AuditMetadata.generateParser("") ~
      SqlParser.get[Muid]("user_id") ~
      SqlParser.get[String]("email") ~
      SqlParser.get[Boolean]("verified") ~
      SqlParser.get[Muid]("verification_code_id") ~
      SqlParser.get[Option[DateTime]]("verification_sent_date")
    ) map {
    case id ~ audit ~ userId ~ email ~ emailVerified ~ emailVerificationCode ~ emailVerificationSentDate =>
      UserEmail(
        id,
        audit,
        userId,
        email,
        emailVerified,
        emailVerificationCode,
        emailVerificationSentDate
      )
  }

当我在测试中执行此操作时,我收到以下错误:

[error]    Multiple ResultSets were returned by the query. (AbstractJdbc2Statement.java:354)
...

预计,不仅仅是一个简单的结果;但是,我对如何正确解析这个案子感到困惑。

我的假设是: UserEmail.simpleParser single 适用于简单行 和 UserEmail.simpleParser * 将处理多行

我无法根据文档来计算这个问题,至少目前还没有在其他地方找到任何有用的东西。

如何从结果集中解析多行?

更新:我刚刚找到了这个要点(https://gist.github.com/davegurnell/4b432066b39949850b04)并且有很好的解释,并且像这样创建了一个ResultSetParser:

val multipleParser: ResultSetParser[List[UserEmail]] = UserEmail.simpleParser.*

而且......那没有用!

谢谢,

0 个答案:

没有答案