【问题标题】:Why doesn't ScalaQuery create ddl for foreign key?为什么 ScalaQuery 不为外键创建 ddl?
【发布时间】:2012-06-19 17:13:38
【问题描述】:

我使用 ScalaQuery 0.10.0-M1 有以下表定义:

import org.scalaquery.ql.basic.{ BasicTable => Table }

object Nodes extends Table[(String, String)]("node") {
    def id = column[String]("id", O.PrimaryKey)
    def name = column[String]("name", O.NotNull)

    def * = id ~ name
    private def uName = index("uk_name", name, unique = true)
}

object Links extends Table[(String, String, String, String)]("link") {
    def id = column[String]("id", O.PrimaryKey)
    def from = column[String]("from_id", O.NotNull)
    def link = column[String]("name", O.NotNull)
    def to = column[String]("to_id", O.NotNull)

    def * = id ~ from ~ link ~ to
    private def ukFromLinkTo = index("uk_FromLinkTo", from ~ link ~ to, unique = true)
    private def fkFrom = foreignKey("fk_Link_Node_From", from, Nodes)(_.id)
    private def fkTo = foreignKey("fk_Link_Node_To", to, Nodes)(_.id)
}

但是在使用这个 sn-p 创建(和打印)ddl 时:

val db = Database.forURL("jdbc:h2:mem:test1;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")

db withSession {
    val ddl = (Nodes.ddl ++ Links.ddl)
    ddl.create
    println(ddl.createStatements.mkString("\n"))
}

不会生成或打印外键。

这是为什么呢?我该如何解决?

【问题讨论】:

    标签: h2 ddl scalaquery h2db


    【解决方案1】:

    看起来可能是因为您的 index 和 foreignKey 方法是私有的。我发现这个问题是使用 scalaquery 搜索唯一列的一部分。我已经有一个非私有索引方法并复制了您的一个 fk 方法,发现正在创建索引,但不是 fk 约束。当我删除“private”关键字时,创建了 fk 约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2012-07-02
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多