У меня есть таблица в 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 [email protected]: 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]
Похоже, Anorm ожидает, что первичные ключи будут иметь тип Long. Есть ли способ заставить Anorm принимать первичный ключ типа Text без исключения?
Я просмотрел исходный код Anorm, но никак не мог понять, где это на самом деле происходит.