2011-03-18 10 views
8

¿Cómo definimos una clave principal múltiple y una clave externa en ScalaQuery?Clave primaria múltiple de ScalaQuery y clave externa

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 
} 

Entonces, ¿cuál es el código para utilizar si quiero PK1 y PK2 en myTable2 ser la clave principal y fk1 en myTable2 que se refieren a id en myTable1?

Respuesta

8

lo siguiente debe funcionar en contra de la rama principal 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) 
} 

Mientras fk1 en myTable2 es la columna subyacente, fkMyTable1 es la definición de clave externa que funciona como una combinación en la clave externa. Las claves externas están disponibles en ScalaQuery 0.9.1, las claves primarias explícitas (con nombres y con soporte para múltiples columnas) están disponibles en el maestro en este momento y se incluirán en 0.9.2. Puede encontrar más ejemplos en las clases de pruebas unitarias ForeignKeyTest y PrimaryKeyTest.

+0

gracias por la respuesta. ¿Alguna idea sobre cuándo se lanzará 0.9.2? Estoy usando SBT con ScalaQuery, así que no estoy pensando en usar la compilación maestra. – JohanSJA

Cuestiones relacionadas