我继续玩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.*
而且......那没有用!
谢谢,