2012-06-17 2 views
2

i를 ScalaQuery 사용하여 테이블 정의 다음 0.10.0을-M1 있습니다ScalaQuery가 외래 키에 대해 ddl을 생성하지 않는 이유는 무엇입니까?

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

없음 외래 키를 생성하거나 인쇄받을를 .

왜 그럴까요? 어떻게 해결할 수 있습니까?

답변

1

index 및 foreignKey 메소드가 비공개 인 것으로 보입니다. 나는이 질문을 scalaquery가있는 고유 한 열에 대한 검색의 일부로 발견했습니다. 이미 비공개 인덱스 메서드를 사용하고 fk 메서드 중 하나를 복사하여 인덱스가 만들어졌지만 fk 제약 조건이 아니라는 것을 알았습니다. "private"키워드를 제거하면 fk 제약이 생성됩니다.

관련 문제