How to model an entity with many children in Sorm?

你离开我真会死。 提交于 2019-11-29 08:03:10

Easy peasy! You define them unrelated:

case class Workspace ( name : String )
case class Document ( ... )

Then you choose a way you wish them to be linked. I see two.

Variant #1

case class WorkspaceDocuments 
  ( workspace : Workspace, documents : Seq[Document] )

And get all documents of a workspace like so:

Db.query[WorkspaceDocuments]
  .whereEqual("workspace", theWorkspace)
  .fetchOne()
  .map(_.documents)
  .getOrElse(Seq())

In this case it makes sense to specify the workspace property as unique in instance declaration:

... Instance (
  entities = Set() +
             Entity[WorkspaceDocuments]( unique = Set() + Seq("workspace") )
  ...
)

Variant #2

case class WorkspaceToDocument
  ( workspace : Workspace, document : Document )

And get documents of a workspace like so:

Db.query[WorkspaceToDocument]
  .whereEqual("workspace", theWorkspace)
  .whereEqual("document.name", "...") // ability to filter docs
  .fetch()
  .map(_.document)

First variant won't let you filter docs in your query (at least in SORM v0.3.*) but due to ability to set a unique constraint on a workspace it should perform better on workspace-based queries. The second variant is more flexible, allowing you to apply all kinds of filters.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!