2

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)
}

ただし、このスニペットを使用して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"))
}

外部キーは生成も印刷もされません。

何故ですか?そして、どうすれば修正できますか?

4

1 に答える 1

1

indexメソッドとforeignKeyメソッドがプライベートであることが原因のようです。この質問は、scalaqueryを使用した一意の列の検索の一部として見つかりました。私はすでに非プライベートインデックスメソッドを持っていて、fkメソッドの1つをコピーしましたが、インデックスが作成されていることがわかりましたが、fk制約はありませんでした。「private」キーワードを削除すると、fk制約が作成されました。

于 2012-10-23T14:34:24.640 に答える