Scala Slick 表继承

2024-01-01

我以这种方式实现 SQL 表继承:

Table Shape:
   Column   |  Type  
------------+---------
 shape_id   | integer
 square     | foat 
 name       | character varying(64)

Table Triangle
   Column   |  Type
------------+---------
 shape_id   | integer
 a          | float
 b          | float
 c          | float
Foreign-key constraints:
    "fkey1" FOREIGN KEY (shape_id) REFERENCES Shape(shape_id)

Table Circle
   Column   |  Type
------------+---------
 shape_id   | integer
 r          | float
Foreign-key constraints:
    "fkey2" FOREIGN KEY (shape_id) REFERENCES Shape(shape_id)

是否可以使用 slick 创建三角形扩展 Shape 和 Circle 扩展 Shape 的类模型?

I saw 这个问题 https://stackoverflow.com/questions/15147362/slick-how-to-map-a-query-to-an-inheritance-table-model,但我不喜欢将所有派生表列放入一个表中作为可为空的方法。

谢谢你!


Slick 是一个关系/函数库。它本身并不映射继承。我们讨论如何做我们的 Scala Days 2013 演讲中的 Slick 继承 http://parleys.com/play/51c2e20de4b0d38b54f46243/chapter57/about。我们描述您可以如何做单表继承 http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html就像您引用的帖子中一样。为了类表继承 http://www.martinfowler.com/eaaCatalog/classTableInheritance.html(这似乎正是您想要的)我们建议使用关系在 Slick 中对其进行建模。你不会认为“圆是一种形状”,而是会认为“圆是形状可以承担的角色”。您必须自己保证某些限制。例如,形状不能同时是圆形和三角形。您可以将映射逻辑和约束验证隐藏在 api 后面,然后将其添加到 DAO 中。当您离开 Slick 的关系模式时,您就失去了查询的可组合性(无论如何,JPA 等中都没有这种可组合性)。我们谈论这个建议的光滑应用程序架构 http://parleys.com/play/51c2e20de4b0d38b54f46243/chapter73/about and 可组合/可重用查询 http://parleys.com/play/51c2e20de4b0d38b54f46243/chapter64/about.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala Slick 表继承 的相关文章

随机推荐