Scala Slick 表标签
Posted
技术标签:
【中文标题】Scala Slick 表标签【英文标题】:Scala Slick table tag 【发布时间】:2015-10-29 06:12:12 【问题描述】:slick table中有一个tag参数:
class Companies(tag: Tag) extends Table[Company](tag,"COMPANY") ...
它是干什么用的,有什么办法不和每个表类定义一起写吗?
【问题讨论】:
检查这个问题:***.com/questions/20599438/… thwiegan:我看到了这个问题,但它没有回答作为一个 Slick 库用户我需要标签做什么。我知道他们确实在 Slick 内部使用它,但看起来 Slick 库之外的用户没有使用它。如果是这样,那为什么我的代码中需要该样板文件? 我也看不出有任何方法可以在每次定义表类时不使用类型标记样板,无论是子类化还是任何类型的包装,甚至 def 宏都无济于事。我想也许有人碰巧知道路…… 我曾尝试花一些时间查看源代码,但如果没有在任何地方都没有描述的 Slick 内部架构的大图视图,就很难解析。标记本身根本没有记录。如果 Slick 团队可以发布一些带有内部架构描述的文档,至少是高级别的文档,那就太好了。这将帮助我们这些图书馆用户更好地使用它。 在挖掘 3.2.1 版本的源代码后,我得出结论,这是一个泄露的内部抽象(这并不奇怪):Slick 使用一些内部 AST 构建查询。 AST 有节点,标签是它们的元数据,允许 AST 区分它们中的哪些是例如直接表查询,它适用于一些预测/子查询/狂野的东西。但是,出于某种原因,这些元数据并没有被阻止向所有编写 Slick 的人公开,尽管它本应如此。 【参考方案1】:我见过的最佳答案是:https://***.com/a/27783730/154248
它的用途:假设您需要自己加入一个表。该标签是一种区分参与查询的表的方法。
【讨论】:
【参考方案2】:Tag
提供类型的 AbstractTable
定义,并由 Slicks 内部传递。
【讨论】:
以上是关于Scala Slick 表标签的主要内容,如果未能解决你的问题,请参考以下文章
使用 Play with Scala 和 Slick 在不同文件上的表之间建立一对多关系
Scala + Play Framework + Slick - Json 作为模型字段
scala slick mysql 字段过多 tuple问题