Playframework 2.4 Anormでleft outer join

前回に続き、playframeworkのdataアクセス。
Anormについて学習。テキストはこちら
AnormはORMではなく、SQLを記述しコレクションに格納する。
SQLなので、テーブルのjoinも、もちろん可能。
ただし、left outer joinで結合される側のテーブルにデータが存在しない場合の
paeserの記述ではまったので備忘として残す。
以下のコードを使用すると

  def find(): List[City] = {
    val parser = long("id") ~ str("name") ~ str("country_name") map {
      case i ~ n ~ cn => City(i, n, cn, display(n, cn))
    }
    DB.withConnection { implicit c =>
      // get the data
      val selectQuery = SQL("select a.id, a.name, b.country_name " 
              + "from City a left outer join Country b on a.country_id=b.id")
      selectQuery.as(parser.*)

CityテーブルとCountryテーブルをjoinするがCountryテーブルに存在しない都市を登録すると、Exceptionが発生。

RuntimeException: ColumnName(Country.country_name,Some(country_name))

Countryテーブルの属性(country_name)をoption型にしなければならない。
parserを以下のように修正。

    val parser = long("id") ~ str("name") ~ get[Option[String]]("country_name") map {
      case i ~ n ~ cn => City(i, n, cast(cn), display(n, cn))
    }