【发布时间】:2014-06-30 07:10:08
【问题描述】:
我正在使用slick 2.x's codegen 功能从数据库模式生成 Scala 模型。但是,是否可以遍历外键约束来生成相关模型,例如如果我有这个架构
CREATE TABLE people(id INT PRIMARY KEY AUTO INCREMENT, name VARCHAR(31));
CREATE TABLE dogs(name VARCHAR(31), ownerId INT FOREIGN KEY people(id));
我从 slick 获得以下模型:
case class PeopleRow(id: Int, name: String)
case class DogsRow(name: String, ownerId: Int)
但是,我真正想要的是:
case class PeopleRow(id: Int, name: String)
case class DogsRow(name: String, owner: PeopleRow)
甚至更好:
case class PeopleRow(id: Int, name: String) {
def dogs: List[DogsRow] // return items from dogs table that has this.id as ownerId
}
case class DogsRow(name: String, ownerId: People) {
lazy val owner: People // lazy on-demand or, can be a def too
}
是否有覆盖光滑的代码生成来做到这一点?
【问题讨论】:
-
@EndeNeu:虽然相关的问题并不相关。他正在从 Scala 模式转向生成的 SQL。我想要另一种方式。我想修改 SQL->Scala 代码生成器来为我执行此操作...
-
我链接了这个问题,因为您不能将案例类定义为外键,您需要明确指定它们并且它们必须是某种原始类型(Int、Long 等)。您不能将结构化类型作为键,除非您的用例与 sql 父子关系不同,在这种情况下是的,该问题不相关。
-
@EndeNeu:我想知道是否可以覆盖 codegen 本身,以便将帮助程序
def dogs(参见最后一个示例)添加到生成的案例类中
标签: scala orm code-generation slick slick-2.0