2011-03-18 23 views
8

Jak definiujemy wiele kluczy podstawowych i kluczy obcych w ScalaQuery?ScalaQuery wielokrotny klucz podstawowy i klucz obcy

object myTable1 extends Table([Int])("myTable1") { 
    def id = column[Int]("id", O PrimaryKey) 
    def * = id 
}  

object myTable2 extends Table([Int, Int, Int])("myTable2") { 
    def pk1 = column[Int]("id1") 
    def pk2 = column[Int]("id2") 
    def fk1 = column[Int]("fk1") 
    def * = pk1 ~ pk2 ~ fk1 
} 

Więc jaki jest kod do wykorzystania, jeśli chcę PK1 i PK2 w myTable2 być kluczem podstawowym i FK1 w myTable2 odnieść się do identyfikatora w myTable1?

Odpowiedz

8

Poniższy powinien działać przeciwko głównego oddziału ScalaQuery:

object myTable2 extends Table([Int, Int, Int])("myTable2") { 
    def pk1 = column[Int]("id1") 
    def pk2 = column[Int]("id2") 
    def fk1 = column[Int]("fk1") 
    def * = pk1 ~ pk2 ~ fk1 
    def pk = primaryKey("pk_myTable2", pk1 ~ pk2) 
    def fkMyTable1 = foreignKey("myTable1_fk", fk1, myTable1)(_.id) 
} 

Podczas FK1 w myTable2 jest kolumna Bazowy fkMyTable1 jest kluczem definicja zagranicznego, który może służyć jako sprzężenie na klucz obcy. Klucze obce są dostępne w ScalaQuery 0.9.1, jawne klucze podstawowe (z nazwami i obsługą wielu kolumn) są obecnie dostępne w systemie głównym i będą zawarte w wersji 0.9.2. Więcej przykładów można znaleźć w klasach testów jednostkowych ForeignKeyTest i PrimaryKeyTest.

+0

dzięki za odpowiedź. Masz pomysł, kiedy wersja 0.9.2 zostanie wydana? Używam SBT z ScalaQuery, więc nie myślę o używaniu głównej kompilacji. – JohanSJA