我使用slick 2.x's codegen功能從數據庫模式生成Scala模型。然而,是否有可能遍歷外鍵約束來生成相關模型,例如如果我有這個模式油滑:Codegen外鍵引用
CREATE TABLE people(id INT PRIMARY KEY AUTO INCREMENT, name VARCHAR(31));
CREATE TABLE dogs(name VARCHAR(31), ownerId INT FOREIGN KEY people(id));
我從光滑以下型號:
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
}
有無論如何覆蓋sl ick codegen做到這一點?
@EndeNeu:雖然問題相關不相關。他將從Scala模式轉換爲生成的SQL。我想要另一種方式。我想修改** SQL-> Scala **代碼生成器爲我執行此操作... – pathikrit
我鏈接了這個問題,因爲您不能將case類定義爲外鍵,您需要明確指定它們,並且它們必須是一些原始類型(Int,Long等)。你不能把結構化類型當作鍵,除非你的用例與sql父子關係不同,在那種情況下,是的,那個問題是不相關的。 –
@EndeNeu:我想知道是否我可以重寫代碼庫本身,這樣我就可以在生成的case類中添加helper「def dogs」(參見上面的例子) – pathikrit