Postgresql 为什么Anorm在将主键作为文本插入时抛出TypeDoesNotMatch异常?

Postgresql 为什么Anorm在将主键作为文本插入时抛出TypeDoesNotMatch异常?,postgresql,scala,anorm,postgresql-9.4,Postgresql,Scala,Anorm,Postgresql 9.4,我在Postgres 9.4中有一个表,它的主键是电子邮件地址。然后使用Anorm执行以下操作 DB.withConnection { implicit connection => SQL"insert into member_login_email(email, password) values ($email, $password)".executeInsert() } 执行此操作时,会在表中输入正确的值,但会引发TypeDoesNotMatch运行时异常: at pl

我在Postgres 9.4中有一个表,它的主键是电子邮件地址。然后使用Anorm执行以下操作

 DB.withConnection { implicit connection =>
  SQL"insert into member_login_email(email, password) values ($email, $password)".executeInsert()
}
执行此操作时,会在表中输入正确的值,但会引发TypeDoesNotMatch运行时异常:

    at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.7.jar:2.3.7]
    at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.7.jar:2.3.7]
    at scala.Option.map(Option.scala:145) [scala-library-2.11.1.jar:na]
Caused by: java.lang.RuntimeException: TypeDoesNotMatch(Cannot convert dsfsfadsf@ddd.com: class java.lang.String to Long for column ColumnName(member_login_email.email,Some(email)))
    at scala.sys.package$.error(package.scala:27) ~[scala-library-2.11.1.jar:na]
    at anorm.Sql$.anorm$Sql$$as(Anorm.scala:472) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at anorm.Sql$class.executeInsert(Anorm.scala:350) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at anorm.SimpleSql.executeInsert(Anorm.scala:190) ~[anorm_2.11-2.3.7.jar:2.3.7]
    at repository.MemberLoginEmailRepository$$anonfun$create$1.apply(MemberLoginEmailRepository.scala:17) ~[classes/:na]
阿诺姆似乎希望主键是Long类型的。有没有办法让Anorm接受文本类型的主键而不引发异常


我已经查看了,但一直在努力了解实际发生的情况。

默认情况下,
executeInsert()
使用
ResultSetParser[Option[Long]]
解析从数据库返回的主键。从以下方面来看:

要使用
字符串
主键执行此操作,您可以使用以下选项:

executeInsert(SqlParser.scalar[String].singleOpt)

这将返回一个
选项[String]

谢谢,这很有效。一旦StackOverflow任意限制允许,我将在6分钟内接受这个答案。
executeInsert(SqlParser.scalar[String].singleOpt)