来自 play anorm, create a model from json without passing anorm PK value in the json 我试图将 Seq[Address] 添加到案例类中
case class User(
id: Pk[Long] = NotAssigned,
name: String = "",
email: String = "",
addresses: Seq[Address])
地址是一个具有三个字符串的简单对象/类。一个用户可以有 1 个以上的地址,如何在 findAll 中与用户一起获取所有地址。
def findAll(): Seq[User] = {
Logger.info("select * from pt_users")
DB.withConnection { implicit connection =>
SQL(
"""
select * from pt_users where name like {query} limit {size} offset {offset}
""").as(User.list *)
}
}
最佳答案
关于我发现有用的事情的旁注:如果您不确定是否总是想要获取用户的地址,则可以避免将该关系添加为字段,而是使用元组或其他数据结构来表示它们。这将允许您拥有这样的方法:
def allUsersWithAddresses(): Map[User, Seq[Address])] = ...
但是仍然有方法只返回用户而没有加入的数据。要读取连接(或子选择),您必须使用解析器解析组合输出,如下所示:
.as(User ~ Address *).groupBy(_._1)
如果你真的想把地址放在用户里面,你必须从用户解析器中将地址列表清空,然后将每个不同的用户映射到一个地址:.as(User ~ Address *).groupBy(_._1).map {
case (user, addresses) => user.copy(addresses = addresses)
}
请注意,这些示例只是指向近似解决方案的指针,而不是复制粘贴和编译就绪代码。希望有帮助!
关于mysql - 玩 Scala Anorm 一对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17878128/