2013-04-14 64 views
2

我是斯卡拉和Anorm的新手,但我正在盡我所能給它一個很好的機會。我現在試圖填充對象的子對象列表。Anorm Populate兒童列表

例如,我有一個有多個電話號碼的聯繫人。我將如何去填充數據庫中的電話號碼?

斯卡拉

case class Contact(id: long, phoneNumbers: List[PhoneNumber]) 
case class PhoneNumber(area: String, rest: String) 

表結構

Contact 
    id bigint 

PhoneNumber 
area varchar(3) 
rest varchar(7) 
contact_id bigint 

回答

4

你可以嘗試這樣的事情:

val contacts: Iterable[Contact] = SQL(
    """ 
    SELECT c.id, p.area, p.rest 
    FROM PhoneNumber p 
    JOIN Contact c on p.contact_id = c.id; 
    """ 
).as(long("id") ~ str("area") ~ str("rest") map(flatten) * 
).groupBy(_._1).map { 
    case (k,l) => Contact(k, l.map { 
    d => PhoneNumber(d._2, d._3) 
    }) 
}