在左侧(自身)发现意外的 Nullable 加入别名 table

UnexpectedNullableFound on left (self) join on aliased table

我有一个简单的员工表,它有 manager_id 可以用来自我引用。我正在尝试让一名员工和他的经理

这是我的解析器

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,Some(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)

有人可以帮助我理解为什么会出现此错误吗?提前致谢

所有可以为空的列都需要解析为选项:https://github.com/playframework/anorm/blob/master/docs/manual/working/scalaGuide/main/sql/ScalaAnorm.md#working-with-optionalnullable-columns