scala – 定义投影以映射到嵌套的case类
发布时间:2020-12-16 19:14:57 所属栏目:安全 来源:网络整理
导读:我有这些案例类: case class PolicyHolder(id : String,firstName : String,lastName : String)case class Policy(address : Future[Address],policyHolder : Future[PolicyHolder],created : RichDateTime,duration : RichDuration ) 然后我为Policy定义了
我有这些案例类:
case class PolicyHolder(id : String,firstName : String,lastName : String) case class Policy(address : Future[Address],policyHolder : Future[PolicyHolder],created : RichDateTime,duration : RichDuration ) 然后我为Policy定义了一个光滑的模式 class PolicyDAO(tag: Tag) extends Table[Policy](tag,"POLICIES") with DbConfig { def address = column[String]("ADDRESS",O.PrimaryKey) def policyHolder = foreignKey("POLICY_HOLDER_FK",address,TableQuery[PolicyHolderDAO])(_.id) def created = column[RichDateTime]("CREATED") def duration = column[String]("DURATION") def * = (address,policyHolder,created,duration) <> (Policy.apply,Policy.unapply) } 对我来说,正确定义此投影以将Policy Case类中的policyHolder字段从外键值映射到PolicyHolder案例类的实际实例的最佳方法是什么. 解决方法
我们对此问题的解决方案是将外键id放在case类中,然后使用lazy val或def(后者可能由缓存支持)使用键检索记录.这假设你的PolicyHolders存储在一个单独的表中 – 如果它们被非规范化但你想将它们视为单独的case类,那么你可以让Policy中的lazy val / def构造一个新的case类而不是使用它来检索记录外键.
class PolicyDAO(tag: Tag) extends Table[Policy](tag,O.PrimaryKey) def policyHolderId = column[String]("POLICY_HOLDER_ID") def created = column[RichDateTime]("CREATED") def duration = column[String]("DURATION") def * = (address,policyHolderId,Policy.unapply) } case class Policy(address : Future[Address],policyHolderId : Future[String],duration : RichDuration ) { lazy val policyHolder = policyHolderId.map(id => PolicyHolderDAO.get(id)) } 我们还使用了一组通用的创建/更新/删除方法来计算嵌套,因此当提交策略时,它的内部PolicyHolder也将被提交;我们使用扩展Table的CommonDAO类,并拥有创建/更新/删除方法的原型,然后所有DAO扩展了CommonDAO而不是Table,并根据需要覆盖create / update / delete. 编辑:为了减少错误并减少我们必须编写的样板量,我们使用了Slick的code generation tool – 这样就可以从模式自动生成CRUD操作 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Emacs shell模式下的Bash自动完成
- 调用webservice时提示对操作的回复消息正文进行反序列化时出
- (Scala)中的异步请求播放“挂起”
- scala – 如何在Akka-http 2.4.1中包含application / x-www
- RESTful webservice 和 SOAP webserivce 对比及区别
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- angular – Web组件设计模式
- bash内置命令mapfile:读取文件内容到数组
- angular2-jwt.d.ts给出“找不到模块’@ angular / http”错
- scala – 修剪案例类的String字段的值