0
我有一個簡單的員工表,它具有manager_id,通過它可以引用它自己。我試圖與他的經理相處僱員UnexpectedNullableFound左邊(自己)加入別名表
這裏是我的解析器
object User{
val simple = {
get[Option[Int]]("users.user_id")~
str("users.email")~
get[Option[String]]("users.first_name")~
get[Option[String]]("users.last_name")~
get[Option[String]]("users.nick_name")~
bool("users.is_manager")~
bool("users.is_hr_manager")~
bool("users.is_admin")~
get[Option[Int]]("users.manager_id") map {
case user_id~email~first_name~last_name~nick_name~is_manager~is_hr_manager~is_admin~manager_id => {
User(user_id,email,first_name,last_name,nick_name,is_manager,is_hr_manager,is_admin,manager_id)
}
}
}
def getAliasedParser(alias:String):RowParser[User] = {
getAliased[Option[Int]](alias+"_user_id")~
getAliased[String](alias+"_email")~
getAliased[Option[String]](alias+"_first_name")~
getAliased[Option[String]](alias+"_last_name")~
getAliased[Option[String]](alias+"_nick_name")~
getAliased[Boolean](alias+"_is_manager")~
getAliased[Boolean](alias+"_is_hr_manager")~
getAliased[Boolean](alias+"_is_admin")~
getAliased[Option[Int]](alias+"_manager_id") map {
case user_id~email~first_name~last_name~nick_name~is_manager~is_hr_manager~is_admin~manager_id => {
User(user_id,email,first_name,last_name,nick_name,is_manager,is_hr_manager,is_admin,manager_id)
}
}
}
val withManager = User.simple ~ (User.getAliasedParser("mgr") ?) map {
case user~manager => (user,manager)
}
UnexpectedNullableFound(的ColumnName(users.email,有些(mgr_email)))]
這裏是我的查詢:
def findByEmailWithManager(email: String): Option[(User,Option[User])] = {
DB.withConnection { implicit connection =>
SQL("""
SELECT
`users`.`user_id`,
`users`.`email`,
`users`.`first_name`,
`users`.`last_name`,
`users`.`nick_name`,
`users`.`is_manager`,
`users`.`is_hr_manager`,
`users`.`is_admin`,
`users`.`manager_id` ,
b.`user_id` mgr_user_id,
b.`email` mgr_email,
b.`first_name` mgr_first_name,
b.`last_name` mgr_last_name,
b.`nick_name` mgr_nick_name,
b.`is_manager` mgr_is_manager,
b.`is_hr_manager` mgr_is_hr_manager,
b.`is_admin` mgr_is_admin,
b.`manager_id` mgr_manager_id
FROM `users` left outer join `users` b on (users.manager_id = b.user_id)
where `users`.email = {email}
""").on('email -> email).as(User.withManager.singleOpt)
}
}
我得到這個錯誤,當我嘗試執行查詢
UnexpectedNullableFound(ColumnName(users.email,Some(mgr_email)))]
這裏是我的情況下,類
case class User(id:Option[Int]=None,email:String,firstName:Option[String]=None,lastName:Option[String]=None,nickName:Option[String]=None,isManager:Boolean=false,isHrManager:Boolean=false,isAdministrator:Boolean=false,managerId:Option[Int]=None)
有人能幫助我理解爲什麼我得到這個錯誤?在此先感謝
列是'NULL'而在解析器不可選。您應該使用相同的參數手動執行查詢以檢查解析的列,並可能通過將其解析爲可選來更新解析。 – cchantep
我在這裏使用自連接,所以右邊可以完全爲null。這是否意味着我必須將右側的所有映射定義爲可選?那麼在User.getAliasedParser(「mgr」)之後添加問號有什麼意義?) – vumaasha