Scala - 发现意外的可空 - 左连接
Scala - Unexpected Nullable Found - Left Join
我的 Scala 应用程序收到了一个 UnexpectedNullableFound 错误,我希望获得有关如何更正此错误的帮助。
错误:-
[error] application - Unable to log user in. An exception was thrown
java.lang.RuntimeException: Left(UnexpectedNullableFound(ColumnName(.language,Some(language)))) at anorm.MayErr$$anonfun$get.apply(MayErr.scala:35) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.MayErr$$anonfun$get.apply(MayErr.scala:34) ~[anorm_2.11-2.4.0.jar:2.4.0] at scala.util.Either.fold(Either.scala:98) ~[scala-library-2.11.12.jar:na] at anorm.MayErr.get(MayErr.scala:34) ~[anorm_2.11-2.4.0.jar:2.4.0]
at anorm.Row$class.unsafeGet(Row.scala:103) ~[anorm_2.11-2.4.0.jar:2.4.0]
at anorm.Cursor$ResultRow.unsafeGet(Cursor.scala:77) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.Row$class.apply(Row.scala:80) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.Cursor$ResultRow.apply(Cursor.scala:77) ~[anorm_2.11-2.4.0.jar:2.4.0]
at models.UserModel$$anonfun$findUserByEmailAndPassword$$anonfun$apply.apply(UserModel.scala:162) ~[classes/:na]
at models.UserModel$$anonfun$findUserByEmailAndPassword$$anonfun$apply.apply(UserModel.scala:156) ~[classes/:na]
这是我认为可能导致此错误的代码:-
def findUserByEmailAndPassword(email: String, password: String, browserHeaders: String, ip: String): Option[SocialUser] = DB.withConnection(db) { implicit c =>
SQL"""
select * from find_user_by_email_and_password($email, $password, $browserHeaders, inet($ip))
"""().map(row => (row[Option[Long]]("id"),
row[Option[String]]("email"),
row[Option[Int]]("verification"),
row[Option[Boolean]]("on_mailing_list"),
row[Option[Boolean]]("tfa_enabled"),
row[Option[String]]("pgp"),
row[String]("language")) match {
case (Some(id: Long),
Some(email: String),
Some(verification: Int),
Some(on_mailing_list: Boolean),
Some(tfa_enabled: Boolean),
pgp: Option[String],
language: String) =>
Some(SocialUser(id, email, verification, language, on_mailing_list, tfa_enabled, pgp))
case _ =>
None
}
).head
如有任何帮助,我们将不胜感激。
您要从 language
列中取出一些 row[String]("language")
,但此列包含 NULL
值。
您需要将其写成row[Option[String]]("language")
或在数据库方案中将语言列设为NOT NULL
。
我的 Scala 应用程序收到了一个 UnexpectedNullableFound 错误,我希望获得有关如何更正此错误的帮助。
错误:-
[error] application - Unable to log user in. An exception was thrown
java.lang.RuntimeException: Left(UnexpectedNullableFound(ColumnName(.language,Some(language)))) at anorm.MayErr$$anonfun$get.apply(MayErr.scala:35) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.MayErr$$anonfun$get.apply(MayErr.scala:34) ~[anorm_2.11-2.4.0.jar:2.4.0] at scala.util.Either.fold(Either.scala:98) ~[scala-library-2.11.12.jar:na] at anorm.MayErr.get(MayErr.scala:34) ~[anorm_2.11-2.4.0.jar:2.4.0]
at anorm.Row$class.unsafeGet(Row.scala:103) ~[anorm_2.11-2.4.0.jar:2.4.0]
at anorm.Cursor$ResultRow.unsafeGet(Cursor.scala:77) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.Row$class.apply(Row.scala:80) ~[anorm_2.11-2.4.0.jar:2.4.0] at anorm.Cursor$ResultRow.apply(Cursor.scala:77) ~[anorm_2.11-2.4.0.jar:2.4.0]
at models.UserModel$$anonfun$findUserByEmailAndPassword$$anonfun$apply.apply(UserModel.scala:162) ~[classes/:na]
at models.UserModel$$anonfun$findUserByEmailAndPassword$$anonfun$apply.apply(UserModel.scala:156) ~[classes/:na]
这是我认为可能导致此错误的代码:-
def findUserByEmailAndPassword(email: String, password: String, browserHeaders: String, ip: String): Option[SocialUser] = DB.withConnection(db) { implicit c =>
SQL"""
select * from find_user_by_email_and_password($email, $password, $browserHeaders, inet($ip))
"""().map(row => (row[Option[Long]]("id"),
row[Option[String]]("email"),
row[Option[Int]]("verification"),
row[Option[Boolean]]("on_mailing_list"),
row[Option[Boolean]]("tfa_enabled"),
row[Option[String]]("pgp"),
row[String]("language")) match {
case (Some(id: Long),
Some(email: String),
Some(verification: Int),
Some(on_mailing_list: Boolean),
Some(tfa_enabled: Boolean),
pgp: Option[String],
language: String) =>
Some(SocialUser(id, email, verification, language, on_mailing_list, tfa_enabled, pgp))
case _ =>
None
}
).head
如有任何帮助,我们将不胜感激。
您要从 language
列中取出一些 row[String]("language")
,但此列包含 NULL
值。
您需要将其写成row[Option[String]]("language")
或在数据库方案中将语言列设为NOT NULL
。